From 2eeb275104b202a7d59f384841515b1b43b5e85c Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Wed, 26 Aug 2020 17:28:50 +1000 Subject: [PATCH 001/264] First setup and build, simple controller added --- .idea/.gitignore | 2 + .idea/.name | 1 + .idea/compiler.xml | 19 +++ .idea/encodings.xml | 10 ++ .idea/libraries/Maven__antlr_antlr_2_7_7.xml | 13 ++ .../Maven__aopalliance_aopalliance_1_0.xml | 13 ++ .idea/libraries/Maven__asm_asm_2_2_3.xml | 13 ++ .../Maven__asm_asm_commons_2_2_3.xml | 13 ++ .idea/libraries/Maven__asm_asm_tree_2_2_3.xml | 13 ++ .idea/libraries/Maven__asm_asm_util_2_2_3.xml | 13 ++ .../Maven__ca_uhn_hapi_hapi_base_2_0.xml | 13 ++ ...n__ca_uhn_hapi_hapi_structures_v25_2_0.xml | 13 ++ ...n__ca_uhn_hapi_hapi_structures_v26_2_0.xml | 13 ++ .../Maven__cglib_cglib_nodep_2_2.xml | 13 ++ .../Maven__com_mchange_c3p0_0_9_2_1.xml | 13 ++ ...m_mchange_mchange_commons_java_0_2_3_4.xml | 13 ++ ...com_thoughtworks_xstream_xstream_1_4_3.xml | 13 ++ ...mons_beanutils_commons_beanutils_1_7_0.xml | 13 ++ ...Maven__commons_chain_commons_chain_1_1.xml | 13 ++ .../Maven__commons_cli_commons_cli_1_2.xml | 13 ++ ..._collections_commons_collections_3_2_2.xml | 13 ++ ..._commons_digester_commons_digester_1_8.xml | 13 ++ ...ns_fileupload_commons_fileupload_1_2_1.xml | 13 ++ .../Maven__commons_io_commons_io_1_4.xml | 13 ++ .../Maven__commons_lang_commons_lang_2_4.xml | 13 ++ ...mons_validator_commons_validator_1_3_1.xml | 13 ++ .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml | 13 ++ ...Maven__javax_activation_activation_1_1.xml | 13 ++ .../Maven__javax_mail_mail_1_4_1.xml | 13 ++ .../Maven__javax_servlet_jsp_api_2_0.xml | 13 ++ .../Maven__javax_servlet_jstl_1_1_2.xml | 13 ++ .../Maven__javax_servlet_servlet_api_2_4.xml | 13 ++ ...vax_validation_validation_api_1_0_0_GA.xml | 13 ++ .idea/libraries/Maven__log4j_log4j_1_2_15.xml | 13 ++ ...ven__mysql_mysql_connector_java_5_1_28.xml | 13 ++ .../Maven__net_sf_ehcache_ehcache_2_10_0.xml | 13 ++ ...__org_apache_commons_commons_lang3_3_1.xml | 13 ++ ..._lucene_lucene_analyzers_common_4_10_4.xml | 13 ++ ...__org_apache_lucene_lucene_core_4_10_4.xml | 13 ++ ..._org_apache_lucene_lucene_facet_4_10_4.xml | 13 ++ ...rg_apache_lucene_lucene_queries_4_10_4.xml | 13 ++ ...pache_lucene_lucene_queryparser_4_10_4.xml | 13 ++ ...rg_apache_lucene_lucene_sandbox_4_10_4.xml | 13 ++ ...n__org_apache_struts_struts_core_1_3_8.xml | 13 ++ ..._org_apache_struts_struts_taglib_1_3_8.xml | 13 ++ ...__org_apache_struts_struts_tiles_1_3_8.xml | 13 ++ ...en__org_apache_velocity_velocity_1_6_2.xml | 13 ++ ...org_apache_velocity_velocity_tools_2_0.xml | 13 ++ ...ven__org_azeckoski_reflectutils_0_9_14.xml | 13 ++ ...__org_codehaus_groovy_groovy_all_2_4_6.xml | 13 ++ ...dehaus_jackson_jackson_core_asl_1_9_13.xml | 13 ++ ...haus_jackson_jackson_mapper_asl_1_9_13.xml | 13 ++ ...ernate_commons_annotations_4_0_5_Final.xml | 13 ++ ...g_hibernate_hibernate_c3p0_4_3_9_Final.xml | 13 ++ ...g_hibernate_hibernate_core_4_3_9_Final.xml | 13 ++ ...ibernate_hibernate_ehcache_4_3_9_Final.xml | 13 ++ ...te_hibernate_search_engine_5_1_2_Final.xml | 13 ++ ...rnate_hibernate_search_orm_5_1_2_Final.xml | 13 ++ ...ernate_hibernate_validator_4_2_0_Final.xml | 13 ++ ...ence_hibernate_jpa_2_1_api_1_0_0_Final.xml | 13 ++ ...ven__org_javassist_javassist_3_19_0_GA.xml | 13 ++ .../Maven__org_jboss_jandex_1_1_0_Final.xml | 13 ++ ...g_jboss_logging_jboss_logging_3_1_3_GA.xml | 13 ++ ..._jboss_logging_annotations_1_2_0_Beta1.xml | 13 ++ ...s_transaction_api_1_2_spec_1_0_0_Final.xml | 13 ++ .idea/libraries/Maven__org_jdom_jdom_1_1.xml | 13 ++ ...en__org_liquibase_liquibase_core_2_0_5.xml | 13 ++ ...ven__org_openmrs_api_openmrs_api_2_1_1.xml | 13 ++ ...rs_liquibase_ext_identity_insert_1_2_1.xml | 13 ++ ...nmrs_liquibase_ext_modify_column_2_0_2.xml | 13 ++ ...mrs_liquibase_ext_type_converter_1_0_1.xml | 13 ++ ...ven__org_openmrs_web_openmrs_web_2_1_1.xml | 13 ++ .../Maven__org_owasp_encoder_encoder_1_2.xml | 13 ++ .../Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml | 13 ++ .../Maven__org_slf4j_slf4j_api_1_6_0.xml | 13 ++ .../Maven__org_slf4j_slf4j_log4j12_1_6_0.xml | 13 ++ ...ringframework_spring_aop_4_1_4_RELEASE.xml | 13 ++ ...ngframework_spring_beans_4_1_4_RELEASE.xml | 13 ++ ...framework_spring_context_4_1_4_RELEASE.xml | 13 ++ ...k_spring_context_support_4_1_4_RELEASE.xml | 13 ++ ...ingframework_spring_core_4_1_4_RELEASE.xml | 13 ++ ...mework_spring_expression_4_1_4_RELEASE.xml | 13 ++ ...ingframework_spring_jdbc_4_1_4_RELEASE.xml | 13 ++ ...ringframework_spring_orm_4_1_4_RELEASE.xml | 13 ++ ...ringframework_spring_oxm_4_1_4_RELEASE.xml | 13 ++ ...pringframework_spring_tx_4_1_4_RELEASE.xml | 13 ++ ...ringframework_spring_web_4_1_4_RELEASE.xml | 13 ++ ...gframework_spring_webmvc_4_1_4_RELEASE.xml | 13 ++ .idea/libraries/Maven__oro_oro_2_0_8.xml | 13 ++ ...n__postgresql_postgresql_9_0_801_jdbc4.xml | 13 ++ .../libraries/Maven__sslext_sslext_1_2_0.xml | 13 ++ .idea/libraries/Maven__taglibs_page_1_0_1.xml | 13 ++ .../Maven__taglibs_request_1_0_1.xml | 13 ++ .../Maven__taglibs_response_1_0_1.xml | 13 ++ .../Maven__taglibs_standard_1_1_2.xml | 13 ++ .idea/libraries/Maven__xalan_xalan_2_7_0.xml | 13 ++ .../Maven__xerces_xercesImpl_2_8_0.xml | 13 ++ .../Maven__xmlpull_xmlpull_1_1_3_1.xml | 13 ++ .../libraries/Maven__xpp3_xpp3_min_1_1_4c.xml | 13 ++ .idea/misc.xml | 11 ++ .idea/modules.xml | 10 ++ .idea/vcs.xml | 6 + api/basicmodule-api.iml | 14 +++ api/pom.xml | 18 ++- basicmodule.iml | 12 ++ omod/basicmodule-omod.iml | 113 ++++++++++++++++++ omod/pom.xml | 58 +++++++-- .../basicmodule/extension/html/AdminList.java | 55 --------- .../controller/BasicModuleFormController.java | 91 -------------- .../web/controller/HIPController.java | 13 ++ omod/src/main/resources/config.xml | 7 -- .../basicmodule/AdminListExtensionTest.java | 52 -------- pom.xml | 42 ++++--- 113 files changed, 1536 insertions(+), 233 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/.name create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/libraries/Maven__antlr_antlr_2_7_7.xml create mode 100644 .idea/libraries/Maven__aopalliance_aopalliance_1_0.xml create mode 100644 .idea/libraries/Maven__asm_asm_2_2_3.xml create mode 100644 .idea/libraries/Maven__asm_asm_commons_2_2_3.xml create mode 100644 .idea/libraries/Maven__asm_asm_tree_2_2_3.xml create mode 100644 .idea/libraries/Maven__asm_asm_util_2_2_3.xml create mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml create mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml create mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml create mode 100644 .idea/libraries/Maven__cglib_cglib_nodep_2_2.xml create mode 100644 .idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml create mode 100644 .idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml create mode 100644 .idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml create mode 100644 .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml create mode 100644 .idea/libraries/Maven__commons_chain_commons_chain_1_1.xml create mode 100644 .idea/libraries/Maven__commons_cli_commons_cli_1_2.xml create mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml create mode 100644 .idea/libraries/Maven__commons_digester_commons_digester_1_8.xml create mode 100644 .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml create mode 100644 .idea/libraries/Maven__commons_io_commons_io_1_4.xml create mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_4.xml create mode 100644 .idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml create mode 100644 .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml create mode 100644 .idea/libraries/Maven__javax_activation_activation_1_1.xml create mode 100644 .idea/libraries/Maven__javax_mail_mail_1_4_1.xml create mode 100644 .idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml create mode 100644 .idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml create mode 100644 .idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml create mode 100644 .idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml create mode 100644 .idea/libraries/Maven__log4j_log4j_1_2_15.xml create mode 100644 .idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml create mode 100644 .idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml create mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml create mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml create mode 100644 .idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml create mode 100644 .idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml create mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml create mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml create mode 100644 .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml create mode 100644 .idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml create mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml create mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml create mode 100644 .idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml create mode 100644 .idea/libraries/Maven__org_jdom_jdom_1_1.xml create mode 100644 .idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml create mode 100644 .idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml create mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml create mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml create mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml create mode 100644 .idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml create mode 100644 .idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml create mode 100644 .idea/libraries/Maven__oro_oro_2_0_8.xml create mode 100644 .idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml create mode 100644 .idea/libraries/Maven__sslext_sslext_1_2_0.xml create mode 100644 .idea/libraries/Maven__taglibs_page_1_0_1.xml create mode 100644 .idea/libraries/Maven__taglibs_request_1_0_1.xml create mode 100644 .idea/libraries/Maven__taglibs_response_1_0_1.xml create mode 100644 .idea/libraries/Maven__taglibs_standard_1_1_2.xml create mode 100644 .idea/libraries/Maven__xalan_xalan_2_7_0.xml create mode 100644 .idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml create mode 100644 .idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml create mode 100644 .idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 api/basicmodule-api.iml create mode 100644 basicmodule.iml create mode 100644 omod/basicmodule-omod.iml delete mode 100644 omod/src/main/java/org/openmrs/module/basicmodule/extension/html/AdminList.java delete mode 100644 omod/src/main/java/org/openmrs/module/basicmodule/web/controller/BasicModuleFormController.java create mode 100644 omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java delete mode 100644 omod/src/test/java/org/openmrs/module/basicmodule/AdminListExtensionTest.java diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..5c98b428 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,2 @@ +# Default ignored files +/workspace.xml \ No newline at end of file diff --git a/.idea/.name b/.idea/.name new file mode 100644 index 00000000..b685336f --- /dev/null +++ b/.idea/.name @@ -0,0 +1 @@ +basicmodule \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 00000000..4d05d7c2 --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 00000000..de5715ee --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml new file mode 100644 index 00000000..b8d93d8e --- /dev/null +++ b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml new file mode 100644 index 00000000..30ff5cb7 --- /dev/null +++ b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_2_2_3.xml b/.idea/libraries/Maven__asm_asm_2_2_3.xml new file mode 100644 index 00000000..421187a1 --- /dev/null +++ b/.idea/libraries/Maven__asm_asm_2_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml b/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml new file mode 100644 index 00000000..938e2850 --- /dev/null +++ b/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml b/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml new file mode 100644 index 00000000..6932cc85 --- /dev/null +++ b/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_util_2_2_3.xml b/.idea/libraries/Maven__asm_asm_util_2_2_3.xml new file mode 100644 index 00000000..ecd7d41d --- /dev/null +++ b/.idea/libraries/Maven__asm_asm_util_2_2_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml new file mode 100644 index 00000000..833f5c6c --- /dev/null +++ b/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml new file mode 100644 index 00000000..77c391dc --- /dev/null +++ b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml new file mode 100644 index 00000000..727e8e18 --- /dev/null +++ b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml b/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml new file mode 100644 index 00000000..a8b52958 --- /dev/null +++ b/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml b/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml new file mode 100644 index 00000000..ae27d7e4 --- /dev/null +++ b/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml new file mode 100644 index 00000000..93772c7f --- /dev/null +++ b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml b/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml new file mode 100644 index 00000000..2144f271 --- /dev/null +++ b/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml new file mode 100644 index 00000000..1cb64edf --- /dev/null +++ b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml b/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml new file mode 100644 index 00000000..38653c20 --- /dev/null +++ b/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml b/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml new file mode 100644 index 00000000..cec24931 --- /dev/null +++ b/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml new file mode 100644 index 00000000..13afda29 --- /dev/null +++ b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml b/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml new file mode 100644 index 00000000..49f1defe --- /dev/null +++ b/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml new file mode 100644 index 00000000..e59b3ef5 --- /dev/null +++ b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_1_4.xml b/.idea/libraries/Maven__commons_io_commons_io_1_4.xml new file mode 100644 index 00000000..054eda88 --- /dev/null +++ b/.idea/libraries/Maven__commons_io_commons_io_1_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml new file mode 100644 index 00000000..5e8b8d33 --- /dev/null +++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml b/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml new file mode 100644 index 00000000..476d18d8 --- /dev/null +++ b/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml new file mode 100644 index 00000000..14681ee8 --- /dev/null +++ b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_activation_activation_1_1.xml b/.idea/libraries/Maven__javax_activation_activation_1_1.xml new file mode 100644 index 00000000..180d5875 --- /dev/null +++ b/.idea/libraries/Maven__javax_activation_activation_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml b/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml new file mode 100644 index 00000000..2c155f3a --- /dev/null +++ b/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml b/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml new file mode 100644 index 00000000..b9bb9b62 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml b/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml new file mode 100644 index 00000000..ee8c310a --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml b/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml new file mode 100644 index 00000000..eb1ede25 --- /dev/null +++ b/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml b/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml new file mode 100644 index 00000000..4b644e91 --- /dev/null +++ b/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__log4j_log4j_1_2_15.xml b/.idea/libraries/Maven__log4j_log4j_1_2_15.xml new file mode 100644 index 00000000..c6024af8 --- /dev/null +++ b/.idea/libraries/Maven__log4j_log4j_1_2_15.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml new file mode 100644 index 00000000..90a1a184 --- /dev/null +++ b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml b/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml new file mode 100644 index 00000000..3f893567 --- /dev/null +++ b/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml new file mode 100644 index 00000000..32bfe3b2 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml new file mode 100644 index 00000000..a3b8895c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml new file mode 100644 index 00000000..554d84d3 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml new file mode 100644 index 00000000..0ad6872d --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml new file mode 100644 index 00000000..f309de56 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml new file mode 100644 index 00000000..ecc8ec23 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml new file mode 100644 index 00000000..d1e7fb13 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml new file mode 100644 index 00000000..072320e0 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml new file mode 100644 index 00000000..9674c05e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml new file mode 100644 index 00000000..e4c6c813 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml new file mode 100644 index 00000000..6263f326 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml new file mode 100644 index 00000000..2e6b0aaf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml b/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml new file mode 100644 index 00000000..d8d38b68 --- /dev/null +++ b/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml b/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml new file mode 100644 index 00000000..4eed402f --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml new file mode 100644 index 00000000..98eb5499 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml new file mode 100644 index 00000000..77f3bad5 --- /dev/null +++ b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml new file mode 100644 index 00000000..9ed6d297 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml new file mode 100644 index 00000000..fbefafc5 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml new file mode 100644 index 00000000..0eee168e --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml new file mode 100644 index 00000000..010d5bdb --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml new file mode 100644 index 00000000..cbda97d4 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml new file mode 100644 index 00000000..4a481d30 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml new file mode 100644 index 00000000..efa6acb0 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml new file mode 100644 index 00000000..6492b2b2 --- /dev/null +++ b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml new file mode 100644 index 00000000..be983fcc --- /dev/null +++ b/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml new file mode 100644 index 00000000..d3cd0897 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml new file mode 100644 index 00000000..815ab4d8 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml new file mode 100644 index 00000000..715be298 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml new file mode 100644 index 00000000..2ab91298 --- /dev/null +++ b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jdom_jdom_1_1.xml b/.idea/libraries/Maven__org_jdom_jdom_1_1.xml new file mode 100644 index 00000000..a6eefaf8 --- /dev/null +++ b/.idea/libraries/Maven__org_jdom_jdom_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml b/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml new file mode 100644 index 00000000..662f12fc --- /dev/null +++ b/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml b/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml new file mode 100644 index 00000000..fa2b6205 --- /dev/null +++ b/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml new file mode 100644 index 00000000..04398051 --- /dev/null +++ b/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml new file mode 100644 index 00000000..ca6b2fbf --- /dev/null +++ b/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml new file mode 100644 index 00000000..06d12514 --- /dev/null +++ b/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml b/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml new file mode 100644 index 00000000..75e87ded --- /dev/null +++ b/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml b/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml new file mode 100644 index 00000000..a083bde9 --- /dev/null +++ b/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml new file mode 100644 index 00000000..b0c0de41 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml new file mode 100644 index 00000000..be41698a --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml new file mode 100644 index 00000000..83ddd54d --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml new file mode 100644 index 00000000..c1dd843d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml new file mode 100644 index 00000000..09c706d2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml new file mode 100644 index 00000000..62d56a59 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml new file mode 100644 index 00000000..aeb4d1d3 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml new file mode 100644 index 00000000..dd905809 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml new file mode 100644 index 00000000..5e76b4eb --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml new file mode 100644 index 00000000..fbf7bc67 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml new file mode 100644 index 00000000..3e022abd --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml new file mode 100644 index 00000000..1b23bbef --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml new file mode 100644 index 00000000..0af9fd06 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml new file mode 100644 index 00000000..b9924b1d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml new file mode 100644 index 00000000..a05a7b3d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__oro_oro_2_0_8.xml b/.idea/libraries/Maven__oro_oro_2_0_8.xml new file mode 100644 index 00000000..25203a04 --- /dev/null +++ b/.idea/libraries/Maven__oro_oro_2_0_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml b/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml new file mode 100644 index 00000000..8c4abe4b --- /dev/null +++ b/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__sslext_sslext_1_2_0.xml b/.idea/libraries/Maven__sslext_sslext_1_2_0.xml new file mode 100644 index 00000000..e8c78314 --- /dev/null +++ b/.idea/libraries/Maven__sslext_sslext_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_page_1_0_1.xml b/.idea/libraries/Maven__taglibs_page_1_0_1.xml new file mode 100644 index 00000000..6d4a6420 --- /dev/null +++ b/.idea/libraries/Maven__taglibs_page_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_request_1_0_1.xml b/.idea/libraries/Maven__taglibs_request_1_0_1.xml new file mode 100644 index 00000000..6ab76542 --- /dev/null +++ b/.idea/libraries/Maven__taglibs_request_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_response_1_0_1.xml b/.idea/libraries/Maven__taglibs_response_1_0_1.xml new file mode 100644 index 00000000..bc1c8a25 --- /dev/null +++ b/.idea/libraries/Maven__taglibs_response_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_standard_1_1_2.xml b/.idea/libraries/Maven__taglibs_standard_1_1_2.xml new file mode 100644 index 00000000..8d7bb739 --- /dev/null +++ b/.idea/libraries/Maven__taglibs_standard_1_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__xalan_xalan_2_7_0.xml b/.idea/libraries/Maven__xalan_xalan_2_7_0.xml new file mode 100644 index 00000000..dd647b42 --- /dev/null +++ b/.idea/libraries/Maven__xalan_xalan_2_7_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml b/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml new file mode 100644 index 00000000..74ccea09 --- /dev/null +++ b/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml b/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml new file mode 100644 index 00000000..0f2d9ef4 --- /dev/null +++ b/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml b/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml new file mode 100644 index 00000000..6726a2d6 --- /dev/null +++ b/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..972ec8d7 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..817a9f4c --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/api/basicmodule-api.iml b/api/basicmodule-api.iml new file mode 100644 index 00000000..005dbf0e --- /dev/null +++ b/api/basicmodule-api.iml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/pom.xml b/api/pom.xml index 388a1dae..b54cd1bd 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -2,13 +2,21 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - org.openmrs.module - basicmodule + org.bahmni.module + hipmodule 0.1-SNAPSHOT - basicmodule-api + hipmodule-api jar - Basic Module API - API project for Basic Module + HIP Module API + API project for HIP Module + + + + org.openmrs.api + openmrs-api + 2.1.1 + + diff --git a/basicmodule.iml b/basicmodule.iml new file mode 100644 index 00000000..4fd5057c --- /dev/null +++ b/basicmodule.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/omod/basicmodule-omod.iml b/omod/basicmodule-omod.iml new file mode 100644 index 00000000..368c198c --- /dev/null +++ b/omod/basicmodule-omod.iml @@ -0,0 +1,113 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/omod/pom.xml b/omod/pom.xml index 184afcfa..ba4c5063 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -2,26 +2,27 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 - org.openmrs.module - basicmodule + org.bahmni.module + hipmodule 0.1-SNAPSHOT - basicmodule-omod + hipmodule-omod jar - Basic Module OMOD - OpenMRS module project for Basic Module + HIP Module OMOD + OpenMRS module project for HIP Module - org.openmrs.module - basicmodule-api - ${project.parent.version} + org.bahmni.module + hipmodule-api + 0.1-SNAPSHOT org.openmrs.web openmrs-web provided + 2.1.1 @@ -37,6 +38,47 @@ org.apache.maven.plugins maven-dependency-plugin + + org.openmrs.maven.plugins + maven-openmrs-plugin + true + + + init + initialize + + initialize-module + + + + pack + package + + package-module + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + Expand moduleApplicationContext and messages + + unpack-dependencies + + generate-resources + + ${project.parent.groupId} + ${project.parent.artifactId}-api + true + **/* + ${project.build.directory}/classes + + + + diff --git a/omod/src/main/java/org/openmrs/module/basicmodule/extension/html/AdminList.java b/omod/src/main/java/org/openmrs/module/basicmodule/extension/html/AdminList.java deleted file mode 100644 index 8974905f..00000000 --- a/omod/src/main/java/org/openmrs/module/basicmodule/extension/html/AdminList.java +++ /dev/null @@ -1,55 +0,0 @@ -/** - * The contents of this file are subject to the OpenMRS Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://license.openmrs.org - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - * License for the specific language governing rights and limitations - * under the License. - * - * Copyright (C) OpenMRS, LLC. All Rights Reserved. - */ -package org.openmrs.module.basicmodule.extension.html; - -import java.util.HashMap; -import java.util.Map; - -import org.openmrs.module.Extension; -import org.openmrs.module.web.extension.AdministrationSectionExt; - -/** - * This class defines the links that will appear on the administration page under the - * "basicmodule.title" heading. This extension is enabled by defining (uncommenting) it in the - * /metadata/config.xml file. - */ -public class AdminList extends AdministrationSectionExt { - - /** - * @see org.openmrs.module.web.extension.AdministrationSectionExt#getMediaType() - */ - public Extension.MEDIA_TYPE getMediaType() { - return Extension.MEDIA_TYPE.html; - } - - /** - * @see org.openmrs.module.web.extension.AdministrationSectionExt#getTitle() - */ - public String getTitle() { - return "basicmodule.title"; - } - - /** - * @see org.openmrs.module.web.extension.AdministrationSectionExt#getLinks() - */ - public Map getLinks() { - - Map map = new HashMap(); - - map.put("module/basicmodule/basicmoduleLink.form", "basicmodule.replace.this.link.name"); - - return map; - } - -} diff --git a/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/BasicModuleFormController.java b/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/BasicModuleFormController.java deleted file mode 100644 index 5f9eaca0..00000000 --- a/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/BasicModuleFormController.java +++ /dev/null @@ -1,91 +0,0 @@ -/** - * The contents of this file are subject to the OpenMRS Public License - * Version 1.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * http://license.openmrs.org - * - * Software distributed under the License is distributed on an "AS IS" - * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the - * License for the specific language governing rights and limitations - * under the License. - * - * Copyright (C) OpenMRS, LLC. All Rights Reserved. - */ -package org.openmrs.module.basicmodule.web.controller; - -import java.util.Collection; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.openmrs.Patient; -import org.openmrs.api.context.Context; -import org.springframework.stereotype.Controller; -import org.springframework.validation.BindingResult; -import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; - -/** - * This class configured as controller using annotation and mapped with the URL of - * 'module/basicmodule/basicmoduleLink.form'. - */ -@Controller -@RequestMapping(value = "module/basicmodule/basicmoduleLink.form") -public class BasicModuleFormController { - - /** Logger for this class and subclasses */ - protected final Log log = LogFactory.getLog(getClass()); - - /** Success form view name */ - private final String SUCCESS_FORM_VIEW = "/module/basicmodule/basicmoduleForm"; - - /** - * Initially called after the formBackingObject method to get the landing form name - * - * @return String form view name - */ - @RequestMapping(method = RequestMethod.GET) - public String showForm() { - return SUCCESS_FORM_VIEW; - } - - /** - * All the parameters are optional based on the necessity - * - * @param httpSession - * @param anyRequestObject - * @param errors - * @return - */ - @RequestMapping(method = RequestMethod.POST) - public String onSubmit(HttpSession httpSession, @ModelAttribute("anyRequestObject") Object anyRequestObject, - BindingResult errors) { - - if (errors.hasErrors()) { - // return error view - } - - return SUCCESS_FORM_VIEW; - } - - /** - * This class returns the form backing object. This can be a string, a boolean, or a normal java - * pojo. The bean name defined in the ModelAttribute annotation and the type can be just defined - * by the return type of this method - */ - @ModelAttribute("thePatientList") - protected Collection formBackingObject(HttpServletRequest request) throws Exception { - // get all patients that have an identifier "101" (from the demo sample data) - // see http://resources.openmrs.org/doc/index.html?org/openmrs/api/PatientService.html for - // a list of all PatientService methods - Collection patients = Context.getPatientService().findPatients("101", false); - - // this object will be made available to the jsp page under the variable name - // that is defined in the @ModuleAttribute tag - return patients; - } - -} diff --git a/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java b/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java new file mode 100644 index 00000000..0af0fbb7 --- /dev/null +++ b/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java @@ -0,0 +1,13 @@ +package org.openmrs.module.basicmodule.web.controller; + +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; + +@Controller +public class HIPController { + @RequestMapping("/v1/hip/hello") + public String helloWorld() { + return "Hello World"; + } + +} diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 076e6d33..02b816ad 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -19,13 +19,6 @@ ${openmrs.platform.version} - - - org.openmrs.admin.list - ${MODULE_PACKAGE}.extension.html.AdminList - - - + + + + + + + + org.openmrs.module + webservices.rest-omod + 2.12 + provided + + + api @@ -29,6 +33,14 @@ - 1.11.2 + 2.1.1 + + + + openmrs-repo + OpenMRS Nexus Repository + http://mavenrepo.openmrs.org/nexus/content/repositories/public + + From c26d1d6b7f4627a9b728167a6d1a5f89ed065ded Mon Sep 17 00:00:00 2001 From: David Viktor Koltai Date: Wed, 26 Aug 2020 18:54:13 +0700 Subject: [PATCH 002/264] update readme with installation instructions --- README.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 3cd1155b..dab860dd 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,18 @@ -openmrs-module-basicmodule +openmrs-module-hipmodule ========================== -A demonstration module for new OpenMRS module developers +HIP module for exposing HIP specific features from OpenMRS. Description ----------- -This is a very basic module which can be used as a starting point in creating a new module. +This module is supporting the HIP service with all necessary endpoints exposed that are required by the HIP service. Building from Source -------------------- -You will need to have Java 1.6+ and Maven 2.x+ installed. Use the command 'mvn package' to -compile and package the module. The .omod file will be in the omod/target folder. +You will need to have Java 1.6+ and Maven 2.x+ installed. +You need to install the OpenMrs module SDK from https://github.com/openmrs/openmrs-sdk (see Readme for installation instructions) + +Use the command 'mvn package' **for the parent level (root folder)**, not the child projects (so not api or omod folder) to compile and package the module. The .omod file will be in the omod/target folder. Alternatively you can add the snippet provided in the [Creating Modules](https://wiki.openmrs.org/x/cAEr) page to your omod/pom.xml and use the mvn command: From 1a6ae85436999e0792f1fe3bf1ec56c6b5fa2569 Mon Sep 17 00:00:00 2001 From: David Viktor Koltai Date: Wed, 26 Aug 2020 19:03:21 +0700 Subject: [PATCH 003/264] update maven java compiler to source/target java 8 --- pom.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index cd0d4465..5308dccb 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,10 @@ omod - + + 1.8 + 1.8 + UTF-8 2.1.1 From 84acce42bd374d4483f143f3813da1a71c363671 Mon Sep 17 00:00:00 2001 From: cecilyshentw <67993944+cecilyshentw@users.noreply.github.com> Date: Thu, 27 Aug 2020 10:26:19 +1000 Subject: [PATCH 004/264] Update README.md --- README.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/README.md b/README.md index dab860dd..b3d7ac7c 100644 --- a/README.md +++ b/README.md @@ -12,16 +12,7 @@ Building from Source You will need to have Java 1.6+ and Maven 2.x+ installed. You need to install the OpenMrs module SDK from https://github.com/openmrs/openmrs-sdk (see Readme for installation instructions) -Use the command 'mvn package' **for the parent level (root folder)**, not the child projects (so not api or omod folder) to compile and package the module. The .omod file will be in the omod/target folder. - -Alternatively you can add the snippet provided in the [Creating Modules](https://wiki.openmrs.org/x/cAEr) page to your -omod/pom.xml and use the mvn command: - - mvn package -P deploy-web -D deploy.path="../../openmrs-1.8.x/webapp/src/main/webapp" - -It will allow you to deploy any changes to your web -resources such as jsp or js files without re-installing the module. The deploy path says -where OpenMRS is deployed. +Use the command `mvn clean install` to build the module, the .omod file will be in the omod/target folder. Installation ------------ From 36eb4a7c8e8904e6ec557392042f617131922592 Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Thu, 27 Aug 2020 10:31:17 +1000 Subject: [PATCH 005/264] add .idea to gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 320b19a9..61a0550b 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .project .classpath target +.idea # Package Files # *.jar From 08732da4f7ca01502d6be859b3fb9322fcab18cd Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Thu, 27 Aug 2020 10:49:09 +1000 Subject: [PATCH 006/264] Removed all files that are in the .gitignore --- .idea/.gitignore | 2 - .idea/.name | 1 - .idea/compiler.xml | 19 -- .idea/encodings.xml | 10 - .idea/libraries/Maven__antlr_antlr_2_7_7.xml | 13 - .../Maven__aopalliance_aopalliance_1_0.xml | 13 - .idea/libraries/Maven__asm_asm_2_2_3.xml | 13 - .../Maven__asm_asm_commons_2_2_3.xml | 13 - .idea/libraries/Maven__asm_asm_tree_2_2_3.xml | 13 - .idea/libraries/Maven__asm_asm_util_2_2_3.xml | 13 - .../Maven__ca_uhn_hapi_hapi_base_2_0.xml | 13 - ...n__ca_uhn_hapi_hapi_structures_v25_2_0.xml | 13 - ...n__ca_uhn_hapi_hapi_structures_v26_2_0.xml | 13 - .../Maven__cglib_cglib_nodep_2_2.xml | 13 - .../Maven__com_mchange_c3p0_0_9_2_1.xml | 13 - ...m_mchange_mchange_commons_java_0_2_3_4.xml | 13 - ...com_thoughtworks_xstream_xstream_1_4_3.xml | 13 - ...mons_beanutils_commons_beanutils_1_7_0.xml | 13 - ...Maven__commons_chain_commons_chain_1_1.xml | 13 - .../Maven__commons_cli_commons_cli_1_2.xml | 13 - ..._collections_commons_collections_3_2_2.xml | 13 - ..._commons_digester_commons_digester_1_8.xml | 13 - ...ns_fileupload_commons_fileupload_1_2_1.xml | 13 - .../Maven__commons_io_commons_io_1_4.xml | 13 - .../Maven__commons_lang_commons_lang_2_4.xml | 13 - ...mons_validator_commons_validator_1_3_1.xml | 13 - .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml | 13 - ...Maven__javax_activation_activation_1_1.xml | 13 - .../Maven__javax_mail_mail_1_4_1.xml | 13 - .../Maven__javax_servlet_jsp_api_2_0.xml | 13 - .../Maven__javax_servlet_jstl_1_1_2.xml | 13 - .../Maven__javax_servlet_servlet_api_2_4.xml | 13 - ...vax_validation_validation_api_1_0_0_GA.xml | 13 - .idea/libraries/Maven__log4j_log4j_1_2_15.xml | 13 - ...ven__mysql_mysql_connector_java_5_1_28.xml | 13 - .../Maven__net_sf_ehcache_ehcache_2_10_0.xml | 13 - ...__org_apache_commons_commons_lang3_3_1.xml | 13 - ..._lucene_lucene_analyzers_common_4_10_4.xml | 13 - ...__org_apache_lucene_lucene_core_4_10_4.xml | 13 - ..._org_apache_lucene_lucene_facet_4_10_4.xml | 13 - ...rg_apache_lucene_lucene_queries_4_10_4.xml | 13 - ...pache_lucene_lucene_queryparser_4_10_4.xml | 13 - ...rg_apache_lucene_lucene_sandbox_4_10_4.xml | 13 - ...n__org_apache_struts_struts_core_1_3_8.xml | 13 - ..._org_apache_struts_struts_taglib_1_3_8.xml | 13 - ...__org_apache_struts_struts_tiles_1_3_8.xml | 13 - ...en__org_apache_velocity_velocity_1_6_2.xml | 13 - ...org_apache_velocity_velocity_tools_2_0.xml | 13 - ...ven__org_azeckoski_reflectutils_0_9_14.xml | 13 - ...__org_codehaus_groovy_groovy_all_2_4_6.xml | 13 - ...dehaus_jackson_jackson_core_asl_1_9_13.xml | 13 - ...haus_jackson_jackson_mapper_asl_1_9_13.xml | 13 - ...ernate_commons_annotations_4_0_5_Final.xml | 13 - ...g_hibernate_hibernate_c3p0_4_3_9_Final.xml | 13 - ...g_hibernate_hibernate_core_4_3_9_Final.xml | 13 - ...ibernate_hibernate_ehcache_4_3_9_Final.xml | 13 - ...te_hibernate_search_engine_5_1_2_Final.xml | 13 - ...rnate_hibernate_search_orm_5_1_2_Final.xml | 13 - ...ernate_hibernate_validator_4_2_0_Final.xml | 13 - ...ence_hibernate_jpa_2_1_api_1_0_0_Final.xml | 13 - ...ven__org_javassist_javassist_3_19_0_GA.xml | 13 - .../Maven__org_jboss_jandex_1_1_0_Final.xml | 13 - ...g_jboss_logging_jboss_logging_3_1_3_GA.xml | 13 - ..._jboss_logging_annotations_1_2_0_Beta1.xml | 13 - ...s_transaction_api_1_2_spec_1_0_0_Final.xml | 13 - .idea/libraries/Maven__org_jdom_jdom_1_1.xml | 13 - ...en__org_liquibase_liquibase_core_2_0_5.xml | 13 - ...ven__org_openmrs_api_openmrs_api_2_1_1.xml | 13 - ...rs_liquibase_ext_identity_insert_1_2_1.xml | 13 - ...nmrs_liquibase_ext_modify_column_2_0_2.xml | 13 - ...mrs_liquibase_ext_type_converter_1_0_1.xml | 13 - ...ven__org_openmrs_web_openmrs_web_2_1_1.xml | 13 - .../Maven__org_owasp_encoder_encoder_1_2.xml | 13 - .../Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml | 13 - .../Maven__org_slf4j_slf4j_api_1_6_0.xml | 13 - .../Maven__org_slf4j_slf4j_log4j12_1_6_0.xml | 13 - ...ringframework_spring_aop_4_1_4_RELEASE.xml | 13 - ...ngframework_spring_beans_4_1_4_RELEASE.xml | 13 - ...framework_spring_context_4_1_4_RELEASE.xml | 13 - ...k_spring_context_support_4_1_4_RELEASE.xml | 13 - ...ingframework_spring_core_4_1_4_RELEASE.xml | 13 - ...mework_spring_expression_4_1_4_RELEASE.xml | 13 - ...ingframework_spring_jdbc_4_1_4_RELEASE.xml | 13 - ...ringframework_spring_orm_4_1_4_RELEASE.xml | 13 - ...ringframework_spring_oxm_4_1_4_RELEASE.xml | 13 - ...pringframework_spring_tx_4_1_4_RELEASE.xml | 13 - ...ringframework_spring_web_4_1_4_RELEASE.xml | 13 - ...gframework_spring_webmvc_4_1_4_RELEASE.xml | 13 - .idea/libraries/Maven__oro_oro_2_0_8.xml | 13 - ...n__postgresql_postgresql_9_0_801_jdbc4.xml | 13 - .../libraries/Maven__sslext_sslext_1_2_0.xml | 13 - .idea/libraries/Maven__taglibs_page_1_0_1.xml | 13 - .../Maven__taglibs_request_1_0_1.xml | 13 - .../Maven__taglibs_response_1_0_1.xml | 13 - .../Maven__taglibs_standard_1_1_2.xml | 13 - .idea/libraries/Maven__xalan_xalan_2_7_0.xml | 13 - .../Maven__xerces_xercesImpl_2_8_0.xml | 13 - .../Maven__xmlpull_xmlpull_1_1_3_1.xml | 13 - .../libraries/Maven__xpp3_xpp3_min_1_1_4c.xml | 13 - .idea/misc.xml | 11 - .idea/modules.xml | 10 - .idea/vcs.xml | 6 - .settings/org.eclipse.jdt.core.prefs | 274 ------------------ .settings/org.eclipse.jdt.ui.prefs | 10 - .settings/org.maven.ide.eclipse.prefs | 9 - 105 files changed, 1587 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/.name delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/encodings.xml delete mode 100644 .idea/libraries/Maven__antlr_antlr_2_7_7.xml delete mode 100644 .idea/libraries/Maven__aopalliance_aopalliance_1_0.xml delete mode 100644 .idea/libraries/Maven__asm_asm_2_2_3.xml delete mode 100644 .idea/libraries/Maven__asm_asm_commons_2_2_3.xml delete mode 100644 .idea/libraries/Maven__asm_asm_tree_2_2_3.xml delete mode 100644 .idea/libraries/Maven__asm_asm_util_2_2_3.xml delete mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml delete mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml delete mode 100644 .idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml delete mode 100644 .idea/libraries/Maven__cglib_cglib_nodep_2_2.xml delete mode 100644 .idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml delete mode 100644 .idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml delete mode 100644 .idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml delete mode 100644 .idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml delete mode 100644 .idea/libraries/Maven__commons_chain_commons_chain_1_1.xml delete mode 100644 .idea/libraries/Maven__commons_cli_commons_cli_1_2.xml delete mode 100644 .idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml delete mode 100644 .idea/libraries/Maven__commons_digester_commons_digester_1_8.xml delete mode 100644 .idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml delete mode 100644 .idea/libraries/Maven__commons_io_commons_io_1_4.xml delete mode 100644 .idea/libraries/Maven__commons_lang_commons_lang_2_4.xml delete mode 100644 .idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml delete mode 100644 .idea/libraries/Maven__dom4j_dom4j_1_6_1.xml delete mode 100644 .idea/libraries/Maven__javax_activation_activation_1_1.xml delete mode 100644 .idea/libraries/Maven__javax_mail_mail_1_4_1.xml delete mode 100644 .idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml delete mode 100644 .idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml delete mode 100644 .idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml delete mode 100644 .idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml delete mode 100644 .idea/libraries/Maven__log4j_log4j_1_2_15.xml delete mode 100644 .idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml delete mode 100644 .idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml delete mode 100644 .idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml delete mode 100644 .idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml delete mode 100644 .idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml delete mode 100644 .idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml delete mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml delete mode 100644 .idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml delete mode 100644 .idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml delete mode 100644 .idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml delete mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml delete mode 100644 .idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml delete mode 100644 .idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml delete mode 100644 .idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml delete mode 100644 .idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml delete mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml delete mode 100644 .idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml delete mode 100644 .idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml delete mode 100644 .idea/libraries/Maven__org_jdom_jdom_1_1.xml delete mode 100644 .idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml delete mode 100644 .idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml delete mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml delete mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml delete mode 100644 .idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml delete mode 100644 .idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml delete mode 100644 .idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml delete mode 100644 .idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml delete mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml delete mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml delete mode 100644 .idea/libraries/Maven__oro_oro_2_0_8.xml delete mode 100644 .idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml delete mode 100644 .idea/libraries/Maven__sslext_sslext_1_2_0.xml delete mode 100644 .idea/libraries/Maven__taglibs_page_1_0_1.xml delete mode 100644 .idea/libraries/Maven__taglibs_request_1_0_1.xml delete mode 100644 .idea/libraries/Maven__taglibs_response_1_0_1.xml delete mode 100644 .idea/libraries/Maven__taglibs_standard_1_1_2.xml delete mode 100644 .idea/libraries/Maven__xalan_xalan_2_7_0.xml delete mode 100644 .idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml delete mode 100644 .idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml delete mode 100644 .idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 .settings/org.eclipse.jdt.core.prefs delete mode 100644 .settings/org.eclipse.jdt.ui.prefs delete mode 100644 .settings/org.maven.ide.eclipse.prefs diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 5c98b428..00000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Default ignored files -/workspace.xml \ No newline at end of file diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index b685336f..00000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -basicmodule \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 4d05d7c2..00000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index de5715ee..00000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml b/.idea/libraries/Maven__antlr_antlr_2_7_7.xml deleted file mode 100644 index b8d93d8e..00000000 --- a/.idea/libraries/Maven__antlr_antlr_2_7_7.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml b/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml deleted file mode 100644 index 30ff5cb7..00000000 --- a/.idea/libraries/Maven__aopalliance_aopalliance_1_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_2_2_3.xml b/.idea/libraries/Maven__asm_asm_2_2_3.xml deleted file mode 100644 index 421187a1..00000000 --- a/.idea/libraries/Maven__asm_asm_2_2_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml b/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml deleted file mode 100644 index 938e2850..00000000 --- a/.idea/libraries/Maven__asm_asm_commons_2_2_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml b/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml deleted file mode 100644 index 6932cc85..00000000 --- a/.idea/libraries/Maven__asm_asm_tree_2_2_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__asm_asm_util_2_2_3.xml b/.idea/libraries/Maven__asm_asm_util_2_2_3.xml deleted file mode 100644 index ecd7d41d..00000000 --- a/.idea/libraries/Maven__asm_asm_util_2_2_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml deleted file mode 100644 index 833f5c6c..00000000 --- a/.idea/libraries/Maven__ca_uhn_hapi_hapi_base_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml deleted file mode 100644 index 77c391dc..00000000 --- a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v25_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml b/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml deleted file mode 100644 index 727e8e18..00000000 --- a/.idea/libraries/Maven__ca_uhn_hapi_hapi_structures_v26_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml b/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml deleted file mode 100644 index a8b52958..00000000 --- a/.idea/libraries/Maven__cglib_cglib_nodep_2_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml b/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml deleted file mode 100644 index ae27d7e4..00000000 --- a/.idea/libraries/Maven__com_mchange_c3p0_0_9_2_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml b/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml deleted file mode 100644 index 93772c7f..00000000 --- a/.idea/libraries/Maven__com_mchange_mchange_commons_java_0_2_3_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml b/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml deleted file mode 100644 index 2144f271..00000000 --- a/.idea/libraries/Maven__com_thoughtworks_xstream_xstream_1_4_3.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml b/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml deleted file mode 100644 index 1cb64edf..00000000 --- a/.idea/libraries/Maven__commons_beanutils_commons_beanutils_1_7_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml b/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml deleted file mode 100644 index 38653c20..00000000 --- a/.idea/libraries/Maven__commons_chain_commons_chain_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml b/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml deleted file mode 100644 index cec24931..00000000 --- a/.idea/libraries/Maven__commons_cli_commons_cli_1_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml b/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml deleted file mode 100644 index 13afda29..00000000 --- a/.idea/libraries/Maven__commons_collections_commons_collections_3_2_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml b/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml deleted file mode 100644 index 49f1defe..00000000 --- a/.idea/libraries/Maven__commons_digester_commons_digester_1_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml b/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml deleted file mode 100644 index e59b3ef5..00000000 --- a/.idea/libraries/Maven__commons_fileupload_commons_fileupload_1_2_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_io_commons_io_1_4.xml b/.idea/libraries/Maven__commons_io_commons_io_1_4.xml deleted file mode 100644 index 054eda88..00000000 --- a/.idea/libraries/Maven__commons_io_commons_io_1_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml deleted file mode 100644 index 5e8b8d33..00000000 --- a/.idea/libraries/Maven__commons_lang_commons_lang_2_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml b/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml deleted file mode 100644 index 476d18d8..00000000 --- a/.idea/libraries/Maven__commons_validator_commons_validator_1_3_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml b/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml deleted file mode 100644 index 14681ee8..00000000 --- a/.idea/libraries/Maven__dom4j_dom4j_1_6_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_activation_activation_1_1.xml b/.idea/libraries/Maven__javax_activation_activation_1_1.xml deleted file mode 100644 index 180d5875..00000000 --- a/.idea/libraries/Maven__javax_activation_activation_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml b/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml deleted file mode 100644 index 2c155f3a..00000000 --- a/.idea/libraries/Maven__javax_mail_mail_1_4_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml b/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml deleted file mode 100644 index b9bb9b62..00000000 --- a/.idea/libraries/Maven__javax_servlet_jsp_api_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml b/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml deleted file mode 100644 index ee8c310a..00000000 --- a/.idea/libraries/Maven__javax_servlet_jstl_1_1_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml b/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml deleted file mode 100644 index eb1ede25..00000000 --- a/.idea/libraries/Maven__javax_servlet_servlet_api_2_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml b/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml deleted file mode 100644 index 4b644e91..00000000 --- a/.idea/libraries/Maven__javax_validation_validation_api_1_0_0_GA.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__log4j_log4j_1_2_15.xml b/.idea/libraries/Maven__log4j_log4j_1_2_15.xml deleted file mode 100644 index c6024af8..00000000 --- a/.idea/libraries/Maven__log4j_log4j_1_2_15.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml deleted file mode 100644 index 90a1a184..00000000 --- a/.idea/libraries/Maven__mysql_mysql_connector_java_5_1_28.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml b/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml deleted file mode 100644 index 3f893567..00000000 --- a/.idea/libraries/Maven__net_sf_ehcache_ehcache_2_10_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml deleted file mode 100644 index 32bfe3b2..00000000 --- a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml deleted file mode 100644 index a3b8895c..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_analyzers_common_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml deleted file mode 100644 index 554d84d3..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_core_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml deleted file mode 100644 index 0ad6872d..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_facet_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml deleted file mode 100644 index f309de56..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_queries_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml deleted file mode 100644 index ecc8ec23..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_queryparser_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml b/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml deleted file mode 100644 index d1e7fb13..00000000 --- a/.idea/libraries/Maven__org_apache_lucene_lucene_sandbox_4_10_4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml deleted file mode 100644 index 072320e0..00000000 --- a/.idea/libraries/Maven__org_apache_struts_struts_core_1_3_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml deleted file mode 100644 index 9674c05e..00000000 --- a/.idea/libraries/Maven__org_apache_struts_struts_taglib_1_3_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml b/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml deleted file mode 100644 index e4c6c813..00000000 --- a/.idea/libraries/Maven__org_apache_struts_struts_tiles_1_3_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml deleted file mode 100644 index 6263f326..00000000 --- a/.idea/libraries/Maven__org_apache_velocity_velocity_1_6_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml b/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml deleted file mode 100644 index 2e6b0aaf..00000000 --- a/.idea/libraries/Maven__org_apache_velocity_velocity_tools_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml b/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml deleted file mode 100644 index d8d38b68..00000000 --- a/.idea/libraries/Maven__org_azeckoski_reflectutils_0_9_14.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml b/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml deleted file mode 100644 index 4eed402f..00000000 --- a/.idea/libraries/Maven__org_codehaus_groovy_groovy_all_2_4_6.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml deleted file mode 100644 index 98eb5499..00000000 --- a/.idea/libraries/Maven__org_codehaus_jackson_jackson_core_asl_1_9_13.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml b/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml deleted file mode 100644 index 77f3bad5..00000000 --- a/.idea/libraries/Maven__org_codehaus_jackson_jackson_mapper_asl_1_9_13.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml b/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml deleted file mode 100644 index 9ed6d297..00000000 --- a/.idea/libraries/Maven__org_hibernate_common_hibernate_commons_annotations_4_0_5_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml deleted file mode 100644 index fbefafc5..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_c3p0_4_3_9_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml deleted file mode 100644 index 0eee168e..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_core_4_3_9_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml deleted file mode 100644 index 010d5bdb..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_ehcache_4_3_9_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml deleted file mode 100644 index cbda97d4..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_search_engine_5_1_2_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml deleted file mode 100644 index 4a481d30..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_search_orm_5_1_2_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml b/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml deleted file mode 100644 index efa6acb0..00000000 --- a/.idea/libraries/Maven__org_hibernate_hibernate_validator_4_2_0_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml b/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml deleted file mode 100644 index 6492b2b2..00000000 --- a/.idea/libraries/Maven__org_hibernate_javax_persistence_hibernate_jpa_2_1_api_1_0_0_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml deleted file mode 100644 index be983fcc..00000000 --- a/.idea/libraries/Maven__org_javassist_javassist_3_19_0_GA.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml b/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml deleted file mode 100644 index d3cd0897..00000000 --- a/.idea/libraries/Maven__org_jboss_jandex_1_1_0_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml deleted file mode 100644 index 815ab4d8..00000000 --- a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_1_3_GA.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml deleted file mode 100644 index 715be298..00000000 --- a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_annotations_1_2_0_Beta1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml b/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml deleted file mode 100644 index 2ab91298..00000000 --- a/.idea/libraries/Maven__org_jboss_spec_javax_transaction_jboss_transaction_api_1_2_spec_1_0_0_Final.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jdom_jdom_1_1.xml b/.idea/libraries/Maven__org_jdom_jdom_1_1.xml deleted file mode 100644 index a6eefaf8..00000000 --- a/.idea/libraries/Maven__org_jdom_jdom_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml b/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml deleted file mode 100644 index 662f12fc..00000000 --- a/.idea/libraries/Maven__org_liquibase_liquibase_core_2_0_5.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml b/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml deleted file mode 100644 index fa2b6205..00000000 --- a/.idea/libraries/Maven__org_openmrs_api_openmrs_api_2_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml deleted file mode 100644 index 04398051..00000000 --- a/.idea/libraries/Maven__org_openmrs_liquibase_ext_identity_insert_1_2_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml deleted file mode 100644 index ca6b2fbf..00000000 --- a/.idea/libraries/Maven__org_openmrs_liquibase_ext_modify_column_2_0_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml b/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml deleted file mode 100644 index 06d12514..00000000 --- a/.idea/libraries/Maven__org_openmrs_liquibase_ext_type_converter_1_0_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml b/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml deleted file mode 100644 index 75e87ded..00000000 --- a/.idea/libraries/Maven__org_openmrs_web_openmrs_web_2_1_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml b/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml deleted file mode 100644 index a083bde9..00000000 --- a/.idea/libraries/Maven__org_owasp_encoder_encoder_1_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml deleted file mode 100644 index b0c0de41..00000000 --- a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_6_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml deleted file mode 100644 index be41698a..00000000 --- a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_6_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml b/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml deleted file mode 100644 index 83ddd54d..00000000 --- a/.idea/libraries/Maven__org_slf4j_slf4j_log4j12_1_6_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml deleted file mode 100644 index c1dd843d..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_aop_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml deleted file mode 100644 index 09c706d2..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_beans_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml deleted file mode 100644 index 62d56a59..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_context_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml deleted file mode 100644 index aeb4d1d3..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_context_support_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml deleted file mode 100644 index dd905809..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_core_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml deleted file mode 100644 index 5e76b4eb..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_expression_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml deleted file mode 100644 index fbf7bc67..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_jdbc_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml deleted file mode 100644 index 3e022abd..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_orm_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml deleted file mode 100644 index 1b23bbef..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_oxm_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml deleted file mode 100644 index 0af9fd06..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_tx_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml deleted file mode 100644 index b9924b1d..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_web_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml deleted file mode 100644 index a05a7b3d..00000000 --- a/.idea/libraries/Maven__org_springframework_spring_webmvc_4_1_4_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__oro_oro_2_0_8.xml b/.idea/libraries/Maven__oro_oro_2_0_8.xml deleted file mode 100644 index 25203a04..00000000 --- a/.idea/libraries/Maven__oro_oro_2_0_8.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml b/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml deleted file mode 100644 index 8c4abe4b..00000000 --- a/.idea/libraries/Maven__postgresql_postgresql_9_0_801_jdbc4.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__sslext_sslext_1_2_0.xml b/.idea/libraries/Maven__sslext_sslext_1_2_0.xml deleted file mode 100644 index e8c78314..00000000 --- a/.idea/libraries/Maven__sslext_sslext_1_2_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_page_1_0_1.xml b/.idea/libraries/Maven__taglibs_page_1_0_1.xml deleted file mode 100644 index 6d4a6420..00000000 --- a/.idea/libraries/Maven__taglibs_page_1_0_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_request_1_0_1.xml b/.idea/libraries/Maven__taglibs_request_1_0_1.xml deleted file mode 100644 index 6ab76542..00000000 --- a/.idea/libraries/Maven__taglibs_request_1_0_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_response_1_0_1.xml b/.idea/libraries/Maven__taglibs_response_1_0_1.xml deleted file mode 100644 index bc1c8a25..00000000 --- a/.idea/libraries/Maven__taglibs_response_1_0_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__taglibs_standard_1_1_2.xml b/.idea/libraries/Maven__taglibs_standard_1_1_2.xml deleted file mode 100644 index 8d7bb739..00000000 --- a/.idea/libraries/Maven__taglibs_standard_1_1_2.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__xalan_xalan_2_7_0.xml b/.idea/libraries/Maven__xalan_xalan_2_7_0.xml deleted file mode 100644 index dd647b42..00000000 --- a/.idea/libraries/Maven__xalan_xalan_2_7_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml b/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml deleted file mode 100644 index 74ccea09..00000000 --- a/.idea/libraries/Maven__xerces_xercesImpl_2_8_0.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml b/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml deleted file mode 100644 index 0f2d9ef4..00000000 --- a/.idea/libraries/Maven__xmlpull_xmlpull_1_1_3_1.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml b/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml deleted file mode 100644 index 6726a2d6..00000000 --- a/.idea/libraries/Maven__xpp3_xpp3_min_1_1_4c.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 972ec8d7..00000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 817a9f4c..00000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1ddf..00000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 4c25686e..00000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,274 +0,0 @@ -#Tue Feb 08 13:16:22 EST 2011 -eclipse.preferences.version=1 -org.eclipse.jdt.core.codeComplete.argumentPrefixes= -org.eclipse.jdt.core.codeComplete.argumentSuffixes= -org.eclipse.jdt.core.codeComplete.fieldPrefixes= -org.eclipse.jdt.core.codeComplete.fieldSuffixes= -org.eclipse.jdt.core.codeComplete.localPrefixes= -org.eclipse.jdt.core.codeComplete.localSuffixes= -org.eclipse.jdt.core.codeComplete.staticFieldPrefixes= -org.eclipse.jdt.core.codeComplete.staticFieldSuffixes= -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 -org.eclipse.jdt.core.compiler.compliance=1.5 -org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning -org.eclipse.jdt.core.compiler.processAnnotations=disabled -org.eclipse.jdt.core.compiler.source=1.5 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=20 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=19 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=20 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=18 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=20 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=18 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=1 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=1 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=true -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=true -org.eclipse.jdt.core.formatter.comment.format_block_comments=false -org.eclipse.jdt.core.formatter.comment.format_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=false -org.eclipse.jdt.core.formatter.comment.format_source_code=false -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=do not insert -org.eclipse.jdt.core.formatter.comment.line_length=100 -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=2 -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true -org.eclipse.jdt.core.formatter.indentation.size=4 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=125 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=tab -org.eclipse.jdt.core.formatter.tabulation.size=4 -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 56d6d2d0..00000000 --- a/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,10 +0,0 @@ -#Thu Nov 13 13:26:19 EST 2008 -eclipse.preferences.version=1 -formatter_profile=_OpenMRS Formatter -formatter_settings_version=11 -org.eclipse.jdt.ui.exception.name=e -org.eclipse.jdt.ui.gettersetter.use.is=true -org.eclipse.jdt.ui.javadoc=true -org.eclipse.jdt.ui.keywordthis=false -org.eclipse.jdt.ui.overrideannotation=true -org.eclipse.jdt.ui.text.custom_code_templates= diff --git a/.settings/org.maven.ide.eclipse.prefs b/.settings/org.maven.ide.eclipse.prefs deleted file mode 100644 index 1fd430ec..00000000 --- a/.settings/org.maven.ide.eclipse.prefs +++ /dev/null @@ -1,9 +0,0 @@ -#Tue Feb 08 13:15:09 EST 2011 -activeProfiles= -eclipse.preferences.version=1 -fullBuildGoals=process-test-resources -includeModules=true -resolveWorkspaceProjects=true -resourceFilterGoals=process-resources resources\:testResources -skipCompilerPlugin=true -version=1 From 041a3ad2198448b1f1d851a3a4cbbdde6d011af6 Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Thu, 27 Aug 2020 17:44:06 +1000 Subject: [PATCH 007/264] Modify config and path --- api/basicmodule-api.iml | 73 ++++++++++++++++++- api/pom.xml | 1 + .../module/hip}/BasicModuleActivator.java | 2 +- basicmodule.iml | 2 +- omod/basicmodule-omod.iml | 9 ++- omod/pom.xml | 12 ++- .../hip/web/controller/HIPController.java | 19 +++++ .../web/controller/HIPController.java | 13 ---- omod/src/main/resources/config.xml | 19 +++-- .../resources/webModuleApplicationContext.xml | 2 +- pom.xml | 6 ++ 11 files changed, 132 insertions(+), 26 deletions(-) rename api/src/main/java/org/{openmrs/module/basicmodule => bahmni/module/hip}/BasicModuleActivator.java (96%) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java delete mode 100644 omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java diff --git a/api/basicmodule-api.iml b/api/basicmodule-api.iml index 005dbf0e..75fc53ef 100644 --- a/api/basicmodule-api.iml +++ b/api/basicmodule-api.iml @@ -1,6 +1,6 @@ - + @@ -10,5 +10,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/api/pom.xml b/api/pom.xml index b54cd1bd..bbc9a00b 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -17,6 +17,7 @@ org.openmrs.api openmrs-api 2.1.1 + provided diff --git a/api/src/main/java/org/openmrs/module/basicmodule/BasicModuleActivator.java b/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java similarity index 96% rename from api/src/main/java/org/openmrs/module/basicmodule/BasicModuleActivator.java rename to api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java index a5672c55..02ce7a68 100644 --- a/api/src/main/java/org/openmrs/module/basicmodule/BasicModuleActivator.java +++ b/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java @@ -11,7 +11,7 @@ * * Copyright (C) OpenMRS, LLC. All Rights Reserved. */ -package org.openmrs.module.basicmodule; +package org.bahmni.module.hip; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; diff --git a/basicmodule.iml b/basicmodule.iml index 4fd5057c..f409c0ea 100644 --- a/basicmodule.iml +++ b/basicmodule.iml @@ -1,6 +1,6 @@ - + diff --git a/omod/basicmodule-omod.iml b/omod/basicmodule-omod.iml index 368c198c..7e3173aa 100644 --- a/omod/basicmodule-omod.iml +++ b/omod/basicmodule-omod.iml @@ -1,6 +1,6 @@ - + @@ -109,5 +109,12 @@ + + + + + + + \ No newline at end of file diff --git a/omod/pom.xml b/omod/pom.xml index ba4c5063..53453619 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -24,10 +24,20 @@ provided 2.1.1 + + org.openmrs.module + webservices.rest-omod-common + provided + + + org.openmrs.module + webservices.rest-omod + provided + - ${project.parent.artifactId}-${project.parent.version} + ${project.artifactId}-${project.version} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java new file mode 100644 index 00000000..590ed6b2 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java @@ -0,0 +1,19 @@ +package org.bahmni.module.hip.web.controller; + +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@Controller +public class HIPController { + + @ResponseBody + @RequestMapping(method = RequestMethod.GET, value="/hello") + public String helloWorld() { + return "Hello World"; + } + +} diff --git a/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java b/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java deleted file mode 100644 index 0af0fbb7..00000000 --- a/omod/src/main/java/org/openmrs/module/basicmodule/web/controller/HIPController.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.openmrs.module.basicmodule.web.controller; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -public class HIPController { - @RequestMapping("/v1/hip/hello") - public String helloWorld() { - return "Hello World"; - } - -} diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 02b816ad..c481c8b6 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -3,21 +3,26 @@ - ${project.parent.artifactId} - ${project.parent.name} - ${project.parent.version} - ${MODULE_PACKAGE} - Ben Wolfe + hipmodule + HIP Module OMOD + 0.1-SNAPSHOT + org.bahmni.module.hip + + Stream 1 - ${project.parent.description} + Hip module omod - ${MODULE_PACKAGE}.BasicModuleActivator + org.bahmni.module.hip.BasicModuleActivator ${openmrs.platform.version} + + + org.openmrs.module.webservices.rest + - + diff --git a/pom.xml b/pom.xml index 5308dccb..288886d9 100644 --- a/pom.xml +++ b/pom.xml @@ -24,6 +24,12 @@ 2.12 provided + + org.openmrs.module + webservices.rest-omod-common + 2.12 + provided + From 4cf11ec2eb7af339d1b59de624f1f3a2dea95141 Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Fri, 28 Aug 2020 16:35:30 +1000 Subject: [PATCH 008/264] dummy endpoint to get order by patient --- omod/basicmodule-omod.iml | 1 + omod/pom.xml | 6 +++++ .../hip/web/controller/HIPController.java | 23 ++++++++++++++++--- .../resources/webModuleApplicationContext.xml | 2 -- 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/omod/basicmodule-omod.iml b/omod/basicmodule-omod.iml index 7e3173aa..1a0706ef 100644 --- a/omod/basicmodule-omod.iml +++ b/omod/basicmodule-omod.iml @@ -116,5 +116,6 @@ + \ No newline at end of file diff --git a/omod/pom.xml b/omod/pom.xml index 53453619..fa6920c6 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -34,6 +34,12 @@ webservices.rest-omod provided + + com.google.code.gson + gson + 2.2.2 + compile + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java index 590ed6b2..3e22b807 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java @@ -1,19 +1,36 @@ package org.bahmni.module.hip.web.controller; +import com.google.gson.Gson; +import org.openmrs.Order; +import org.openmrs.Patient; +import org.openmrs.Person; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.List; + @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @Controller public class HIPController { @ResponseBody - @RequestMapping(method = RequestMethod.GET, value="/hello") - public String helloWorld() { - return "Hello World"; + @RequestMapping(method = RequestMethod.GET, value="/hello", params = { + "personUuid" + }) + public String helloWorld(@RequestParam("personUuid") String personUuid) { + if(personUuid.isEmpty()){ + return "UUID is empty"; + } + Person dummyPerson = new Person(); + dummyPerson.setUuid(personUuid); + Patient ourPatient = new Patient(dummyPerson); + List listOrders = org.openmrs.api.context.Context.getOrderService().getAllOrdersByPatient(ourPatient); + String ordersToJson = new Gson().toJson(listOrders); + return ordersToJson; } } diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index d7005c49..fe5a1002 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -27,6 +27,4 @@ - - From 3b3f7246ce255312c918ff75df2358a70c115783 Mon Sep 17 00:00:00 2001 From: Cecily Shen Date: Mon, 31 Aug 2020 11:41:10 +1000 Subject: [PATCH 009/264] Add medication controller and service to get medication by patient and visitType --- .../hip/web/controller/HIPController.java | 36 ----------------- .../web/controller/MedicationController.java | 21 ++++++++++ .../hip/web/service/MedicationService.java | 39 +++++++++++++++++++ 3 files changed, 60 insertions(+), 36 deletions(-) delete mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java deleted file mode 100644 index 3e22b807..00000000 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/HIPController.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.bahmni.module.hip.web.controller; - -import com.google.gson.Gson; -import org.openmrs.Order; -import org.openmrs.Patient; -import org.openmrs.Person; -import org.openmrs.module.webservices.rest.web.RestConstants; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; - -import java.util.List; - -@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") -@Controller -public class HIPController { - - @ResponseBody - @RequestMapping(method = RequestMethod.GET, value="/hello", params = { - "personUuid" - }) - public String helloWorld(@RequestParam("personUuid") String personUuid) { - if(personUuid.isEmpty()){ - return "UUID is empty"; - } - Person dummyPerson = new Person(); - dummyPerson.setUuid(personUuid); - Patient ourPatient = new Patient(dummyPerson); - List listOrders = org.openmrs.api.context.Context.getOrderService().getAllOrdersByPatient(ourPatient); - String ordersToJson = new Gson().toJson(listOrders); - return ordersToJson; - } - -} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java new file mode 100644 index 00000000..f81b4299 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java @@ -0,0 +1,21 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.service.MedicationService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@Controller +public class MedicationController { + + @ResponseBody + @RequestMapping(method = RequestMethod.GET, value="/medication") + public String getMedication(@RequestParam String patientId, @RequestParam String visitType) { + MedicationService service = new MedicationService(); + return service.getMedication(patientId, visitType); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java new file mode 100644 index 00000000..998d0355 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -0,0 +1,39 @@ +package org.bahmni.module.hip.web.service; + +import com.google.gson.Gson; +import org.openmrs.Order; +import org.openmrs.Patient; +import org.openmrs.Person; +import org.openmrs.api.context.Context; + +import java.util.List; +import java.util.stream.Collectors; + +public class MedicationService { + public String getMedication(String patientId, String visitType) + { + if(patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()){ + return "Patient id and visit type are required."; + } + + try { + Patient patient = Context.getPatientService().getPatientByUuid(patientId); + List listOrders = getOrdersByVisitType(patient, visitType); + String ordersToJson = new Gson().toJson(listOrders); + return ordersToJson; + } catch (Exception e) { + return e.getMessage(); + } + } + + private List getOrdersByVisitType(Patient patient, String visitType) { + List listOrders = Context.getOrderService().getAllOrdersByPatient(patient); + return filterOrdersByVisitType(listOrders, visitType); + } + + private List filterOrdersByVisitType(List orders, String visitType) { + return orders.stream().filter(order -> order.getEncounter().getVisit().getVisitType().getName() == visitType) + .collect(Collectors.toList()); + + } +} From c5b65d7f90d1015e9a03fd3ebd9d81acb2a32ebe Mon Sep 17 00:00:00 2001 From: David Viktor Koltai Date: Wed, 9 Sep 2020 12:22:19 +0700 Subject: [PATCH 010/264] fix equality comparison and json parsing to avoid ambiguity --- .../bahmni/module/hip/web/service/MedicationService.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index 998d0355..b8e226d6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -19,7 +19,9 @@ public String getMedication(String patientId, String visitType) try { Patient patient = Context.getPatientService().getPatientByUuid(patientId); List listOrders = getOrdersByVisitType(patient, visitType); - String ordersToJson = new Gson().toJson(listOrders); + if (listOrders.size() == 0) + return "no medication found!"; + String ordersToJson = listOrders.stream().map(order -> order.getUuid()).findFirst().get(); return ordersToJson; } catch (Exception e) { return e.getMessage(); @@ -32,7 +34,8 @@ private List getOrdersByVisitType(Patient patient, String visitType) { } private List filterOrdersByVisitType(List orders, String visitType) { - return orders.stream().filter(order -> order.getEncounter().getVisit().getVisitType().getName() == visitType) + return orders.stream() + .filter(order -> order.getEncounter().getVisit().getVisitType().getName().equals(visitType)) .collect(Collectors.toList()); } From b8d0aa394fad62db061808e641c437546d94e301 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Wed, 9 Sep 2020 15:15:42 +0530 Subject: [PATCH 011/264] HIP-62 | David/Abhijeet | Adds dependency injection for patient service and order service --- .gitignore | 3 ++- .../module/hip/web/config/OpenMRSConfig.java | 21 +++++++++++++++ .../web/controller/MedicationController.java | 13 ++++++--- .../hip/web/service/MedicationService.java | 27 +++++++++++++------ 4 files changed, 52 insertions(+), 12 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/config/OpenMRSConfig.java diff --git a/.gitignore b/.gitignore index 61a0550b..ddfdd4f0 100644 --- a/.gitignore +++ b/.gitignore @@ -4,8 +4,9 @@ .classpath target .idea - +*.DS_Store # Package Files # *.jar *.war *.ear +*.iml diff --git a/omod/src/main/java/org/bahmni/module/hip/web/config/OpenMRSConfig.java b/omod/src/main/java/org/bahmni/module/hip/web/config/OpenMRSConfig.java new file mode 100644 index 00000000..96186288 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/config/OpenMRSConfig.java @@ -0,0 +1,21 @@ +package org.bahmni.module.hip.web.config; + +import org.openmrs.api.OrderService; +import org.openmrs.api.PatientService; +import org.openmrs.api.context.Context; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class OpenMRSConfig { + + @Bean + public PatientService patientService() { + return Context.getPatientService(); + } + + @Bean + public OrderService orderService() { + return Context.getOrderService(); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java index f81b4299..01cf7510 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java @@ -2,6 +2,7 @@ import org.bahmni.module.hip.web.service.MedicationService; import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @@ -12,10 +13,16 @@ @Controller public class MedicationController { + private MedicationService medicationService; + + @Autowired + public MedicationController(MedicationService medicationService) { + this.medicationService = medicationService; + } + @ResponseBody - @RequestMapping(method = RequestMethod.GET, value="/medication") + @RequestMapping(method = RequestMethod.GET, value = "/medication") public String getMedication(@RequestParam String patientId, @RequestParam String visitType) { - MedicationService service = new MedicationService(); - return service.getMedication(patientId, visitType); + return medicationService.getMedication(patientId, visitType); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index b8e226d6..ffced6e4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -1,23 +1,34 @@ package org.bahmni.module.hip.web.service; -import com.google.gson.Gson; import org.openmrs.Order; import org.openmrs.Patient; -import org.openmrs.Person; -import org.openmrs.api.context.Context; +import org.openmrs.api.OrderService; +import org.openmrs.api.PatientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; +@Service public class MedicationService { - public String getMedication(String patientId, String visitType) - { - if(patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()){ + + private PatientService patientService; + private OrderService orderService; + + @Autowired + public MedicationService(PatientService patientService, OrderService orderService) { + this.patientService = patientService; + this.orderService = orderService; + } + + public String getMedication(String patientId, String visitType) { + if (patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()) { return "Patient id and visit type are required."; } try { - Patient patient = Context.getPatientService().getPatientByUuid(patientId); + Patient patient = this.patientService.getPatientByUuid(patientId); List listOrders = getOrdersByVisitType(patient, visitType); if (listOrders.size() == 0) return "no medication found!"; @@ -29,7 +40,7 @@ public String getMedication(String patientId, String visitType) } private List getOrdersByVisitType(Patient patient, String visitType) { - List listOrders = Context.getOrderService().getAllOrdersByPatient(patient); + List listOrders = orderService.getAllOrdersByPatient(patient); return filterOrdersByVisitType(listOrders, visitType); } From eb5708cb06150c12e07a3f1f72ec82cee4badbfe Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 10 Sep 2020 14:53:14 +0530 Subject: [PATCH 012/264] HIP-62 | Abhijeet/David | Adds support for MedicationService test --- omod/pom.xml | 6 ++++ .../hip/web/service/MedicationService.java | 5 ++-- .../module/hip/web/MedicationServiceTest.java | 28 +++++++++++++++++++ .../resources/TestingApplicationContext.xml | 3 +- 4 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java diff --git a/omod/pom.xml b/omod/pom.xml index fa6920c6..170a8e86 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -40,6 +40,12 @@ 2.2.2 compile + + org.springframework.boot + spring-boot-starter-test + 2.3.3.RELEASE + test + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index ffced6e4..d96c6ea5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -23,9 +23,10 @@ public MedicationService(PatientService patientService, OrderService orderServic } public String getMedication(String patientId, String visitType) { - if (patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()) { + + if (patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()) return "Patient id and visit type are required."; - } + try { Patient patient = this.patientService.getPatientByUuid(patientId); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java new file mode 100644 index 00000000..aee7a001 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java @@ -0,0 +1,28 @@ +package org.bahmni.module.hip.web; + + +import org.bahmni.module.hip.web.service.MedicationService; +import org.junit.Test; +import org.openmrs.api.OrderService; +import org.openmrs.api.PatientService; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.mock; + + +public class MedicationServiceTest { + + private PatientService patientService = mock(PatientService.class); + private OrderService orderService = mock(OrderService.class); + + private MedicationService medicationService = new MedicationService(patientService, orderService); + + @Test + public void testShouldReturnPatientIdIsRequiredErrorMessage() { + + String medicationResponse = medicationService.getMedication("", "OPD"); + + assertEquals("Patient id and visit type are required.", medicationResponse); + + } +} diff --git a/omod/src/test/resources/TestingApplicationContext.xml b/omod/src/test/resources/TestingApplicationContext.xml index 4a08b4d9..1f2fce1d 100644 --- a/omod/src/test/resources/TestingApplicationContext.xml +++ b/omod/src/test/resources/TestingApplicationContext.xml @@ -25,5 +25,6 @@ - + + From 2e55c75c4f67bc86ffda51f4eea292ebd5278c88 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 10 Sep 2020 15:25:39 +0530 Subject: [PATCH 013/264] HIP-62 | Abhijeet/David | Moves medication service test under service folder --- .../module/hip/web/{ => service}/MedicationServiceTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename omod/src/test/java/org/bahmni/module/hip/web/{ => service}/MedicationServiceTest.java (94%) diff --git a/omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java similarity index 94% rename from omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java rename to omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java index aee7a001..43fc3b15 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/MedicationServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java @@ -1,4 +1,4 @@ -package org.bahmni.module.hip.web; +package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.service.MedicationService; From fc56ac6e58633f604506af08e9b8e015c39863b5 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 10 Sep 2020 17:54:50 +0530 Subject: [PATCH 014/264] HIP-62 | Abhijeet/David | Throws a NoMedicationFoundException when there are not orders against a patient --- .../exception/NoMedicationFoundException.java | 8 ++++++ .../hip/web/service/MedicationService.java | 18 ++++++------- .../web/service/MedicationServiceTest.java | 26 +++++++++++++++++++ 3 files changed, 42 insertions(+), 10 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/exception/NoMedicationFoundException.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/exception/NoMedicationFoundException.java b/omod/src/main/java/org/bahmni/module/hip/web/exception/NoMedicationFoundException.java new file mode 100644 index 00000000..b7b575dd --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/exception/NoMedicationFoundException.java @@ -0,0 +1,8 @@ +package org.bahmni.module.hip.web.exception; + +public class NoMedicationFoundException extends RuntimeException { + + public NoMedicationFoundException(Integer patientId) { + super("No Medication found for Patient" + patientId); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index d96c6ea5..02e2a0b0 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.web.exception.NoMedicationFoundException; import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.api.OrderService; @@ -28,16 +29,13 @@ public String getMedication(String patientId, String visitType) { return "Patient id and visit type are required."; - try { - Patient patient = this.patientService.getPatientByUuid(patientId); - List listOrders = getOrdersByVisitType(patient, visitType); - if (listOrders.size() == 0) - return "no medication found!"; - String ordersToJson = listOrders.stream().map(order -> order.getUuid()).findFirst().get(); - return ordersToJson; - } catch (Exception e) { - return e.getMessage(); - } + Patient patient = this.patientService.getPatientByUuid(patientId); + List listOrders = getOrdersByVisitType(patient, visitType); + + if (listOrders.isEmpty()) + throw new NoMedicationFoundException(patient.getId()); + + return listOrders.stream().map(order -> order.getUuid()).findFirst().get(); } private List getOrdersByVisitType(Patient patient, String visitType) { diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java index 43fc3b15..3a213dfe 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java @@ -1,13 +1,22 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.web.exception.NoMedicationFoundException; import org.bahmni.module.hip.web.service.MedicationService; import org.junit.Test; +import org.openmrs.Patient; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; +import java.util.ArrayList; + +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class MedicationServiceTest { @@ -23,6 +32,23 @@ public void testShouldReturnPatientIdIsRequiredErrorMessage() { String medicationResponse = medicationService.getMedication("", "OPD"); assertEquals("Patient id and visit type are required.", medicationResponse); + } + + @Test + public void testShouldThrowNoMedicationFoundExceptionGivenPatientHasNoOrders() { + + Patient patient = new Patient(123); + + when(patientService.getPatientByUuid(anyString())).thenReturn(patient); + when(orderService.getAllOrdersByPatient(any())).thenReturn(new ArrayList<>()); + + Exception exception = assertThrows(NoMedicationFoundException.class, () -> { + medicationService.getMedication("3f747cd9-255f-437d-b907-6e84b97a689d", "OPD"); + }); + + String expectedMessage = "No Medication found for Patient"; + String actualMessage = exception.getMessage(); + assertTrue(actualMessage.contains(expectedMessage)); } } From aa133d50e22943a8fbf0a1a94b0c06379b8a9e51 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Mon, 14 Sep 2020 10:33:51 +0530 Subject: [PATCH 015/264] HIP-62 | Abhijeet/David | Creates a simple MedicaitonRequest with quantity and serializies it --- omod/pom.xml | 222 ++++++++++-------- .../web/controller/MedicationController.java | 25 +- .../hip/web/service/MedicationService.java | 25 +- .../resources/webModuleApplicationContext.xml | 2 +- .../web/service/MedicationServiceTest.java | 40 ++-- 5 files changed, 200 insertions(+), 114 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 170a8e86..9b71b6a5 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -1,107 +1,141 @@ - 4.0.0 - - org.bahmni.module - hipmodule - 0.1-SNAPSHOT - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + + org.bahmni.module + hipmodule + 0.1-SNAPSHOT + - hipmodule-omod - jar - HIP Module OMOD - OpenMRS module project for HIP Module + hipmodule-omod + jar + HIP Module OMOD + OpenMRS module project for HIP Module - + org.bahmni.module hipmodule-api 0.1-SNAPSHOT - - org.openmrs.web - openmrs-web + + org.openmrs.web + openmrs-web + provided + 2.1.1 + + + org.openmrs.module + webservices.rest-omod-common provided - 2.1.1 - - - org.openmrs.module - webservices.rest-omod-common - provided - - - org.openmrs.module - webservices.rest-omod - provided - - - com.google.code.gson - gson - 2.2.2 - compile - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - - + + + org.openmrs.module + webservices.rest-omod + provided + + + com.google.code.gson + gson + 2.2.2 + compile + + + org.springframework.boot + spring-boot-starter-test + 2.3.3.RELEASE + test + + + ca.uhn.hapi.fhir + hapi-fhir-base + 5.1.0 + compile + + + org.slf4j + slf4j-api + + + org.slf4j + jcl-over-slf4j + + + commons-io + commons-io + + + org.eclipse.jetty + jetty-server + + + servlet-api + javax.servlet + + + + + ca.uhn.hapi.fhir + hapi-fhir-structures-r4 + 5.1.0 + compile + + - - ${project.artifactId}-${project.version} + + ${project.artifactId}-${project.version} - - - org.openmrs.maven.plugins - maven-openmrs-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - - - org.openmrs.maven.plugins - maven-openmrs-plugin - true - - - init - initialize - - initialize-module - - - - pack - package - - package-module - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - Expand moduleApplicationContext and messages - - unpack-dependencies - - generate-resources - - ${project.parent.groupId} - ${project.parent.artifactId}-api - true - **/* - ${project.build.directory}/classes - - - - - - + + + org.openmrs.maven.plugins + maven-openmrs-plugin + + + org.apache.maven.plugins + maven-dependency-plugin + + + org.openmrs.maven.plugins + maven-openmrs-plugin + true + + + init + initialize + + initialize-module + + + + pack + package + + package-module + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + Expand moduleApplicationContext and messages + + unpack-dependencies + + generate-resources + + ${project.parent.groupId} + ${project.parent.artifactId}-api + true + **/* + ${project.build.directory}/classes + + + + + + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java index 01cf7510..041a32d5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java @@ -1,6 +1,9 @@ package org.bahmni.module.hip.web.controller; +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; import org.bahmni.module.hip.web.service.MedicationService; +import org.hl7.fhir.r4.model.MedicationRequest; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -9,6 +12,10 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @Controller public class MedicationController { @@ -22,7 +29,21 @@ public MedicationController(MedicationService medicationService) { @ResponseBody @RequestMapping(method = RequestMethod.GET, value = "/medication") - public String getMedication(@RequestParam String patientId, @RequestParam String visitType) { - return medicationService.getMedication(patientId, visitType); + public List getMedication(@RequestParam String patientId, @RequestParam String visitType) { + try { + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + // Serialize it + List medicationRequest = medicationService.getMedication(patientId, visitType); + + return medicationRequest + .stream() + .map(parser::encodeResourceToString) + .collect(Collectors.toList()); + } catch (Exception e) { + List errors = new ArrayList(); + errors.add(e.getMessage()); + return errors; + } } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index 02e2a0b0..beeaccfa 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -1,7 +1,12 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.exception.NoMedicationFoundException; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent; +import org.hl7.fhir.r4.model.Quantity; +import org.openmrs.DrugOrder; import org.openmrs.Order; +import org.openmrs.OrderType; import org.openmrs.Patient; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; @@ -23,10 +28,10 @@ public MedicationService(PatientService patientService, OrderService orderServic this.orderService = orderService; } - public String getMedication(String patientId, String visitType) { + public List getMedication(String patientId, String visitType) { if (patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()) - return "Patient id and visit type are required."; + throw new NoMedicationFoundException(123); Patient patient = this.patientService.getPatientByUuid(patientId); @@ -35,7 +40,21 @@ public String getMedication(String patientId, String visitType) { if (listOrders.isEmpty()) throw new NoMedicationFoundException(patient.getId()); - return listOrders.stream().map(order -> order.getUuid()).findFirst().get(); + return listOrders + .stream() + .filter(order -> order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) + .map(order -> (DrugOrder) order) + .map(drugOrder -> { + MedicationRequestDispenseRequestComponent medicationRequestDispenseRequestComponent = + new MedicationRequestDispenseRequestComponent(); + + medicationRequestDispenseRequestComponent.setQuantity(new Quantity(drugOrder.getQuantity())); + + MedicationRequest medicationRequest = new MedicationRequest(); + medicationRequest.setDispenseRequest(medicationRequestDispenseRequestComponent); + return medicationRequest; + }) + .collect(Collectors.toList()); } private List getOrdersByVisitType(Patient patient, String visitType) { diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index fe5a1002..355f2b67 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -26,5 +26,5 @@ - + diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java index 3a213dfe..81ba648f 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationServiceTest.java @@ -1,14 +1,19 @@ +/* package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.exception.NoMedicationFoundException; import org.bahmni.module.hip.web.service.MedicationService; import org.junit.Test; +import org.openmrs.DrugOrder; +import org.openmrs.Order; +import org.openmrs.OrderType; import org.openmrs.Patient; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; import java.util.ArrayList; +import java.util.List; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; @@ -26,29 +31,36 @@ public class MedicationServiceTest { private MedicationService medicationService = new MedicationService(patientService, orderService); - @Test - public void testShouldReturnPatientIdIsRequiredErrorMessage() { - - String medicationResponse = medicationService.getMedication("", "OPD"); - - assertEquals("Patient id and visit type are required.", medicationResponse); - } +// @Test +// public void testShouldReturnPatientIdIsRequiredErrorMessage() { +// +// String medicationResponse = medicationService.getMedication("", "OPD"); +// +// assertEquals("Patient id and visit type are required.", medicationResponse); +// } @Test public void testShouldThrowNoMedicationFoundExceptionGivenPatientHasNoOrders() { Patient patient = new Patient(123); + OrderType orderType = new OrderType(345); + orderType.setUuid(OrderType.DRUG_ORDER_TYPE_UUID); + + DrugOrder drugOrder = new DrugOrder(1234); + drugOrder + .setOrderType(orderType); + ArrayList list = new ArrayList<>(); + + list.add(drugOrder); + when(patientService.getPatientByUuid(anyString())).thenReturn(patient); - when(orderService.getAllOrdersByPatient(any())).thenReturn(new ArrayList<>()); + when(orderService.getAllOrdersByPatient(any())).thenReturn(list); - Exception exception = assertThrows(NoMedicationFoundException.class, () -> { - medicationService.getMedication("3f747cd9-255f-437d-b907-6e84b97a689d", "OPD"); - }); + List opd = medicationService.getMedication("3f747cd9-255f-437d-b907-6e84b97a689d", "OPD"); - String expectedMessage = "No Medication found for Patient"; - String actualMessage = exception.getMessage(); + System.out.println(opd); - assertTrue(actualMessage.contains(expectedMessage)); } } +*/ From 2470139ac500845d57c05000c1a249c23e4ad535 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Mon, 14 Sep 2020 12:55:48 +0530 Subject: [PATCH 016/264] HIP-62 | Abhijeet/David | Adds changes suggested by Bindu --- .../module/hip/BasicModuleActivator.java | 9 +- omod/pom.xml | 222 ++++++++---------- .../resources/webModuleApplicationContext.xml | 6 +- pom.xml | 93 +++++++- 4 files changed, 185 insertions(+), 145 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java b/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java index 02ce7a68..cbda086c 100644 --- a/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java +++ b/api/src/main/java/org/bahmni/module/hip/BasicModuleActivator.java @@ -16,26 +16,27 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.openmrs.module.BaseModuleActivator; +import org.openmrs.module.ModuleActivator; /** * This class contains the logic that is run every time this module is either started or shutdown */ public class BasicModuleActivator extends BaseModuleActivator { - + private Log log = LogFactory.getLog(this.getClass()); - + /** * @see org.openmrs.module.Activator#startup() */ public void startup() { log.info("Starting Basic Module"); } - + /** * @see org.openmrs.module.Activator#shutdown() */ public void shutdown() { log.info("Shutting down Basic Module"); } - + } diff --git a/omod/pom.xml b/omod/pom.xml index 9b71b6a5..89c3bdf3 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -1,141 +1,107 @@ - 4.0.0 - - org.bahmni.module - hipmodule - 0.1-SNAPSHOT - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + + org.bahmni.module + hipmodule + 0.1-SNAPSHOT + - hipmodule-omod - jar - HIP Module OMOD - OpenMRS module project for HIP Module + hipmodule-omod + jar + HIP Module OMOD + OpenMRS module project for HIP Module - + org.bahmni.module hipmodule-api 0.1-SNAPSHOT - - org.openmrs.web - openmrs-web - provided - 2.1.1 - - - org.openmrs.module - webservices.rest-omod-common + + org.openmrs.web + openmrs-web provided - - - org.openmrs.module - webservices.rest-omod - provided - - - com.google.code.gson - gson - 2.2.2 - compile - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - - - ca.uhn.hapi.fhir - hapi-fhir-base - 5.1.0 - compile - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - commons-io - commons-io - - - org.eclipse.jetty - jetty-server - - - servlet-api - javax.servlet - - - - - ca.uhn.hapi.fhir - hapi-fhir-structures-r4 - 5.1.0 - compile - - + ${openMRSVersion} + + + org.openmrs.module + webservices.rest-omod-common + provided + + + org.openmrs.module + webservices.rest-omod + provided + + + com.google.code.gson + gson + 2.2.2 + compile + + + org.springframework.boot + spring-boot-starter-test + 2.3.3.RELEASE + test + + - - ${project.artifactId}-${project.version} + + ${project.artifactId}-${project.version} - - - org.openmrs.maven.plugins - maven-openmrs-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - - - org.openmrs.maven.plugins - maven-openmrs-plugin - true - - - init - initialize - - initialize-module - - - - pack - package - - package-module - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - Expand moduleApplicationContext and messages - - unpack-dependencies - - generate-resources - - ${project.parent.groupId} - ${project.parent.artifactId}-api - true - **/* - ${project.build.directory}/classes - - - - - - + + + org.openmrs.maven.plugins + maven-openmrs-plugin + + + org.apache.maven.plugins + maven-dependency-plugin + + + org.openmrs.maven.plugins + maven-openmrs-plugin + true + + + init + initialize + + initialize-module + + + + pack + package + + package-module + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + Expand moduleApplicationContext and messages + + unpack-dependencies + + generate-resources + + ${project.parent.groupId} + ${project.parent.artifactId}-api + true + **/* + ${project.build.directory}/classes + + + + + + diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index 355f2b67..23fce44a 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -22,9 +22,9 @@ - + - - + + diff --git a/pom.xml b/pom.xml index 288886d9..6570f0bb 100644 --- a/pom.xml +++ b/pom.xml @@ -11,6 +11,20 @@ https://wiki.openmrs.org/x/FQ4z + + api + omod + + + 2.0.4 + 1.8 + 1.8 + UTF-8 + 2.1.1 + + + + @@ -18,6 +32,37 @@ + + org.openmrs.api + openmrs-api + ${openMRSVersion} + jar + provided + + + + org.openmrs.web + openmrs-web + ${openMRSVersion} + jar + provided + + + + org.openmrs.api + openmrs-api + ${openMRSVersion} + test-jar + test + + + + org.openmrs.web + openmrs-web + ${openMRSVersion} + test-jar + test + org.openmrs.module webservices.rest-omod @@ -33,17 +78,34 @@ - - api - omod - - - 1.8 - 1.8 - UTF-8 - 2.1.1 - + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + org.openmrs.maven.plugins + maven-openmrs-plugin + 1.0.1 + + + org.apache.maven.plugins + maven-dependency-plugin + 2.4 + + + + + @@ -52,4 +114,15 @@ http://mavenrepo.openmrs.org/nexus/content/repositories/public + + + + openmrs-repo + OpenMRS Nexus Repository + http://mavenrepo.openmrs.org/nexus/content/repositories/public + + false + + + From 56114b9413dfbf7dbaf60690633b3682f4d0fe11 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Mon, 14 Sep 2020 13:16:41 +0530 Subject: [PATCH 017/264] HIP-62 | Abhijeet/David | Comments out MedicationRequestTranslator as it doesn't work as of now --- omod/pom.xml | 81 +++++++++++++------ .../hip/web/service/MedicationService.java | 20 +++++ 2 files changed, 78 insertions(+), 23 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 89c3bdf3..96afed73 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -24,29 +24,64 @@ provided ${openMRSVersion} - - org.openmrs.module - webservices.rest-omod-common - provided - - - org.openmrs.module - webservices.rest-omod - provided - - - com.google.code.gson - gson - 2.2.2 - compile - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - - + + org.openmrs.module + webservices.rest-omod + provided + + + com.google.code.gson + gson + 2.2.2 + compile + + + org.springframework.boot + spring-boot-starter-test + 2.3.3.RELEASE + test + + + ca.uhn.hapi.fhir + hapi-fhir-base + 5.1.0 + compile + + + org.slf4j + slf4j-api + + + org.slf4j + jcl-over-slf4j + + + commons-io + commons-io + + + org.eclipse.jetty + jetty-server + + + servlet-api + javax.servlet + + + + + ca.uhn.hapi.fhir + hapi-fhir-structures-r4 + 5.1.0 + compile + + + ${project.artifactId}-${project.version} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index beeaccfa..99a02f89 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.exception.NoMedicationFoundException; +import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.MedicationRequest; import org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent; import org.hl7.fhir.r4.model.Quantity; @@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -50,9 +52,27 @@ public List getMedication(String patientId, String visitType) medicationRequestDispenseRequestComponent.setQuantity(new Quantity(drugOrder.getQuantity())); + MedicationRequest medicationRequest = new MedicationRequest(); medicationRequest.setDispenseRequest(medicationRequestDispenseRequestComponent); + + Dosage dosage = new Dosage(); + Dosage.DosageDoseAndRateComponent dosageDoseAndRateComponent = new Dosage.DosageDoseAndRateComponent(); + dosageDoseAndRateComponent.setDose(new Quantity(drugOrder.getDose())); + ArrayList dosageDoseAndRateComponents = new ArrayList<>(); + dosageDoseAndRateComponents.add(dosageDoseAndRateComponent); + dosage.setDoseAndRate(dosageDoseAndRateComponents); + + ArrayList dosages = new ArrayList<>(); + + dosages.add(dosage); + + medicationRequest.setDosageInstruction(dosages); + return medicationRequest; +// MedicationRequestTranslator medicationRequestTranslator = new MedicationRequestTranslatorImpl(); +// +// return medicationRequestTranslator.toFhirResource(drugOrder); }) .collect(Collectors.toList()); } From 3e8a3e0f20f88d991b7c0a311debe289d04c8932 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Mon, 14 Sep 2020 16:40:50 +0530 Subject: [PATCH 018/264] HIP-62 | David/Abhijeet | Wraps the MedicationRequest in Fhir2 bundle and sends it as a json response --- .../web/controller/MedicationController.java | 33 +++++++++---------- .../hip/web/service/MedicationService.java | 13 ++++++-- 2 files changed, 26 insertions(+), 20 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java index 041a32d5..cd0a4ddb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/MedicationController.java @@ -3,19 +3,19 @@ import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.parser.IParser; import org.bahmni.module.hip.web.service.MedicationService; -import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Bundle; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; - @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @Controller public class MedicationController { @@ -27,23 +27,22 @@ public MedicationController(MedicationService medicationService) { this.medicationService = medicationService; } - @ResponseBody - @RequestMapping(method = RequestMethod.GET, value = "/medication") - public List getMedication(@RequestParam String patientId, @RequestParam String visitType) { + @RequestMapping(method = RequestMethod.GET, value = "/medication", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity getMedication(@RequestParam String patientId, @RequestParam String visitType) { try { FhirContext ctx = FhirContext.forR4(); IParser parser = ctx.newJsonParser(); // Serialize it - List medicationRequest = medicationService.getMedication(patientId, visitType); + Bundle bundle = medicationService.getMedication(patientId, visitType); + + String s = parser.encodeResourceToString(bundle); + final HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.setContentType(MediaType.APPLICATION_JSON); - return medicationRequest - .stream() - .map(parser::encodeResourceToString) - .collect(Collectors.toList()); + return new ResponseEntity<>(s, httpHeaders, HttpStatus.OK); } catch (Exception e) { - List errors = new ArrayList(); - errors.add(e.getMessage()); - return errors; + return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); } } -} +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java index 99a02f89..78c90b8f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.exception.NoMedicationFoundException; +import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.MedicationRequest; import org.hl7.fhir.r4.model.MedicationRequest.MedicationRequestDispenseRequestComponent; @@ -30,7 +31,7 @@ public MedicationService(PatientService patientService, OrderService orderServic this.orderService = orderService; } - public List getMedication(String patientId, String visitType) { + public Bundle getMedication(String patientId, String visitType) { if (patientId == null || patientId.isEmpty() || visitType == null || visitType.isEmpty()) throw new NoMedicationFoundException(123); @@ -42,7 +43,9 @@ public List getMedication(String patientId, String visitType) if (listOrders.isEmpty()) throw new NoMedicationFoundException(patient.getId()); - return listOrders + Bundle bundle = new Bundle(); + + listOrders .stream() .filter(order -> order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) .map(order -> (DrugOrder) order) @@ -74,7 +77,11 @@ public List getMedication(String patientId, String visitType) // // return medicationRequestTranslator.toFhirResource(drugOrder); }) - .collect(Collectors.toList()); + .forEach(medicationRequest -> { + bundle.addEntry().setResource(medicationRequest); + }); + + return bundle; } private List getOrdersByVisitType(Patient patient, String visitType) { From a856cc09b8b2a697cf90dac1aa0141d8c78474c1 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Tue, 15 Sep 2020 11:18:16 +0530 Subject: [PATCH 019/264] HIP-62 | Abhijeet/David | 1. Adds fhir2 dependency in config.xml 2. Divides the pom.xml into provided, complie and test sections --- omod/pom.xml | 37 +++++++++++++++--------------- omod/src/main/resources/config.xml | 1 + 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 96afed73..d82ad77c 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -13,6 +13,8 @@ OpenMRS module project for HIP Module + + org.bahmni.module hipmodule-api @@ -29,18 +31,15 @@ webservices.rest-omod provided - - com.google.code.gson - gson - 2.2.2 - compile - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - + + + ca.uhn.hapi.fhir hapi-fhir-base @@ -75,12 +74,14 @@ 5.1.0 compile - + + + + org.springframework.boot + spring-boot-starter-test + 2.3.3.RELEASE + test + diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index c481c8b6..c259604c 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,6 +22,7 @@ org.openmrs.module.webservices.rest + + - - - ca.uhn.hapi.fhir - hapi-fhir-base - 5.1.0 - compile - - - org.slf4j - slf4j-api - - - org.slf4j - jcl-over-slf4j - - - commons-io - commons-io - - - org.eclipse.jetty - jetty-server - - - servlet-api - javax.servlet - - - - - ca.uhn.hapi.fhir - hapi-fhir-structures-r4 - 5.1.0 - compile - + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java index 55797108..d7307f9f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java @@ -2,7 +2,6 @@ import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.parser.IParser; -import org.bahmni.module.hip.web.service.BundleService; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.hl7.fhir.r4.model.Bundle; import org.openmrs.module.webservices.rest.web.RestConstants; @@ -22,17 +21,15 @@ public class BundledMedicationRequestController { private BundleMedicationRequestService bundleMedicationRequestService; - private BundleService bundleService; @Autowired - public BundledMedicationRequestController(BundleMedicationRequestService bundleMedicationRequestService, - BundleService bundleService) { + public BundledMedicationRequestController(BundleMedicationRequestService bundleMedicationRequestService) { this.bundleMedicationRequestService = bundleMedicationRequestService; - this.bundleService = bundleService; } @RequestMapping(method = RequestMethod.GET, value = "/medication", produces = MediaType.APPLICATION_JSON_VALUE) - public @ResponseBody ResponseEntity getBundledMedicationRequestFor(@RequestParam String patientId, @RequestParam String visitType) { + public @ResponseBody + ResponseEntity getBundledMedicationRequestFor(@RequestParam String patientId, @RequestParam String visitType) { try { Bundle bundle = bundleMedicationRequestService.bundleMedicationRequestsFor(patientId, visitType); @@ -46,7 +43,7 @@ public BundledMedicationRequestController(BundleMedicationRequestService bundleM } } - private String serializeBundle(Bundle bundle){ + private String serializeBundle(Bundle bundle) { FhirContext ctx = FhirContext.forR4(); IParser parser = ctx.newJsonParser(); return parser.encodeResourceToString(bundle); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java index 9fd20b83..b63c371a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java @@ -1,41 +1,23 @@ package org.bahmni.module.hip.web.service; -import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.MedicationRequest; -import org.hl7.fhir.r4.model.Quantity; import org.openmrs.DrugOrder; +import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; -import java.util.ArrayList; - +@Service class DrugOrderToMedicationRequestTranslationService { - static MedicationRequest toMedicationRequest(DrugOrder drugOrder) { - - // MedicationRequestTranslator medicationRequestTranslator = new MedicationRequestTranslatorImpl(); - //return medicationRequestTranslator.toFhirResource(drugOrder); - - MedicationRequest.MedicationRequestDispenseRequestComponent medicationRequestDispenseRequestComponent = - new MedicationRequest.MedicationRequestDispenseRequestComponent(); - - medicationRequestDispenseRequestComponent.setQuantity(new Quantity(drugOrder.getQuantity())); - + private MedicationRequestTranslator medicationRequestTranslator; - MedicationRequest medicationRequest = new MedicationRequest(); - medicationRequest.setDispenseRequest(medicationRequestDispenseRequestComponent); - - Dosage dosage = new Dosage(); - Dosage.DosageDoseAndRateComponent dosageDoseAndRateComponent = new Dosage.DosageDoseAndRateComponent(); - dosageDoseAndRateComponent.setDose(new Quantity(drugOrder.getDose())); - ArrayList dosageDoseAndRateComponents = new ArrayList<>(); - dosageDoseAndRateComponents.add(dosageDoseAndRateComponent); - dosage.setDoseAndRate(dosageDoseAndRateComponents); - - ArrayList dosages = new ArrayList<>(); - - dosages.add(dosage); + @Autowired + public DrugOrderToMedicationRequestTranslationService(MedicationRequestTranslator medicationRequestTranslator) { + this.medicationRequestTranslator = medicationRequestTranslator; + } - medicationRequest.setDosageInstruction(dosages); + MedicationRequest toMedicationRequest(DrugOrder drugOrder) { - return medicationRequest; + return medicationRequestTranslator.toFhirResource(drugOrder); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java index 34d6fcb0..027cb05b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java @@ -12,10 +12,14 @@ public class MedicationRequestService { private OpenMRSDrugOrderClient openMRSDrugOrderClient; + private DrugOrderToMedicationRequestTranslationService drugOrderToMedicationRequestTranslationService; @Autowired - public MedicationRequestService(OpenMRSDrugOrderClient openMRSDrugOrderClient) { + public MedicationRequestService(OpenMRSDrugOrderClient openMRSDrugOrderClient, + DrugOrderToMedicationRequestTranslationService drugOrderToMedicationRequestTranslationService) { + this.openMRSDrugOrderClient = openMRSDrugOrderClient; + this.drugOrderToMedicationRequestTranslationService = drugOrderToMedicationRequestTranslationService; } List medicationRequestFor(String patientId, String byVisitType){ @@ -24,7 +28,7 @@ List medicationRequestFor(String patientId, String byVisitTyp return drugOrders .stream() - .map(DrugOrderToMedicationRequestTranslationService::toMedicationRequest) + .map(drugOrder -> drugOrderToMedicationRequestTranslationService.toMedicationRequest(drugOrder)) .collect(Collectors.toList()); } } diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index c259604c..7d59e69d 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,7 +22,7 @@ org.openmrs.module.webservices.rest - + org.openmrs.module.fhir2 + + org.projectlombok + lombok + 1.18.10 + provided + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java new file mode 100644 index 00000000..711a4a42 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java @@ -0,0 +1,15 @@ +package org.bahmni.module.hip.web.controller; + +import ca.uhn.fhir.context.FhirContext; +import org.hl7.fhir.r4.model.Bundle; +import org.springframework.stereotype.Component; + + +@Component +public class HipContext { + private static final FhirContext fhirCtx = FhirContext.forR4(); + + public static String encodeToString(Bundle bundle) { + return fhirCtx.newJsonParser().encodeResourceToString(bundle); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java new file mode 100644 index 00000000..009541d4 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -0,0 +1,56 @@ +package org.bahmni.module.hip.web.controller; + +import org.apache.log4j.Logger; +import org.bahmni.module.hip.web.model.Prescription; +import org.bahmni.module.hip.web.service.PrescriptionService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.util.Date; +import java.util.List; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@Controller +public class PrescriptionController { + private HipContext hipContext; + private PrescriptionService prescriptionService; + private static final Logger log = Logger.getLogger(PrescriptionController.class); + + @Autowired + public PrescriptionController(HipContext hipContext, PrescriptionService prescriptionService) { + this.hipContext = hipContext; + this.prescriptionService = prescriptionService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/prescriptions", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity get(@RequestParam String patientId) { + try { + List prescriptions = prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(prescriptions); + } catch (Exception e) { + log.error("Error occurred while trying to call prescriptionService.getPrescriptions", e); + return ResponseEntity.badRequest() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(e.getMessage()); + } + } + + private Date getFromDate() { + LocalDateTime dateTime = LocalDateTime.now(); + dateTime = dateTime.minusDays(60); + return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/CareContext.java b/omod/src/main/java/org/bahmni/module/hip/web/model/CareContext.java new file mode 100644 index 00000000..b45e208b --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/CareContext.java @@ -0,0 +1,11 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Builder; +import lombok.Data; + +@Builder +@Data +public class CareContext { + String careContextReference; + String careContextType; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java new file mode 100644 index 00000000..190dd780 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java @@ -0,0 +1,18 @@ +package org.bahmni.module.hip.web.model; + +import org.bahmni.module.hip.web.controller.HipContext; +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.JsonProcessingException; +import org.codehaus.jackson.map.JsonSerializer; +import org.codehaus.jackson.map.SerializerProvider; +import org.hl7.fhir.r4.model.Bundle; + +import java.io.IOException; + +public class FhirBundleSerializer extends JsonSerializer { + @Override + public void serialize(Bundle bundle, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) + throws IOException, JsonProcessingException { + jsonGenerator.writeString(HipContext.encodeToString(bundle)); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java new file mode 100644 index 00000000..ed65e880 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java @@ -0,0 +1,23 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.hl7.fhir.r4.model.Bundle; + +@Builder +@Getter +@Setter +public class Prescription { + private CareContext careContext; + private Bundle bundle; + + public CareContext getCareContext() { + return careContext; + } + @JsonSerialize(using = FhirBundleSerializer.class) + public Bundle getBundle() { + return bundle; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java new file mode 100644 index 00000000..1025e22e --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -0,0 +1,23 @@ +package org.bahmni.module.hip.web.service; + +public class Constants { + static final String EKA_SYSTEM = "https://projecteka.in/%s"; + static final String HOSPITAL_SYSTEM = "https://%s/%s"; + static final String FHIR_SCT_SYSTEM = "https://snomed.info/sct"; + static final String EKA_ACT_SYSTEM = "https://projecteka.in/act"; + static final String EKA_LOINC_SYSTEM = "https://projecteka.in/loinc"; + static final String FHIR_CONDITION_CATEGORY_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-category"; + static final String FHIR_CONDITION_CLINICAL_STATUS_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-clinical"; + + + + + static final String PROP_HFR_ID = "bahmniHip.healthFacilityRegistryId"; + static final String PROP_HFR_NAME = "bahmniHip.healthFacilityName"; + static final String PROP_HFR_SYSTEM = "bahmniHip.healthFacilitySystem"; + static final String PROP_PRACTITIONER_SYSTEM = "bahmniHip.practitionerSystem"; + static final String PROP_HFR_URL = "bahmniHip.healthFacilityUrl"; + + static final String FHIR_ENC_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode"; + +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java new file mode 100644 index 00000000..598d7276 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -0,0 +1,247 @@ +package org.bahmni.module.hip.web.service; + +import org.codehaus.jackson.JsonNode; +import org.codehaus.jackson.map.ObjectMapper; +import org.hl7.fhir.instance.model.api.IBaseResource; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.HumanName; +import org.hl7.fhir.r4.model.Medication; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Period; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.hl7.fhir.r4.model.StringType; +import org.openmrs.ConceptReferenceTerm; +import org.openmrs.ConceptSource; +import org.openmrs.Drug; +import org.openmrs.DrugOrder; +import org.openmrs.DrugReferenceMap; +import org.openmrs.EncounterProvider; +import org.openmrs.PatientIdentifier; +import org.openmrs.PersonName; +import org.openmrs.Provider; +import org.openmrs.ProviderAttribute; +import org.openmrs.Visit; + +import java.io.IOException; +import java.util.Collections; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +public class FHIRResourceMapper { + private static Map encounterTypeMap = new HashMap() {{ + put("ADMISSION", "IMP,inpatient encounter"); + put("CONSULTATION", "AMB,ambulatory"); + put("DISCHARGE", "IMP,inpatient encounter"); + put("REG", "AMB,ambulatory"); + put("TRANSFER", "IMP,inpatient encounter"); + }}; + + private static Map visitTypeMap = new HashMap() {{ + put("IPD", "IMP,inpatient encounter"); + put("OPD", "AMB,ambulatory"); + put("EMERGENCY", "EMER,emergency"); + put("FIELD", "FLD,field"); + }}; + + private static Map conceptSourceSystemMap = new HashMap() {{ + put("SCT", "http://snomed.info/sct"); + put("ICD-10-WHO", "http://hl7.org/fhir/ValueSet/icd-10"); + put("ATC", "http://www.whocc.no/atc"); + put("EXAMPLE", "http://example.org/codes"); + }}; + + public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter, Date date) { + Encounter encounter = new Encounter(); + Period period = new Period(); + Visit visit = emrEncounter.getVisit(); + boolean isOPVisit = visit.getVisitType().getName().equalsIgnoreCase("OPD"); + //TODO: the mapping needs to be fixed + /** + * In case of Inpatient visit + * - the period should be entire hospitalization period, and mentioned through encounter.location.period + * - and in that case, encounter.participant.period should be specified for each practitioner encounter period + * In case of outpatient visit + * - encounter.period ought to be still visit period + * - while participant.period should be period of the specific encounter + */ + //TODO fix as per above + if (isOPVisit) { + period.setStart(emrEncounter.getEncounterDatetime()); + period.setEnd(emrEncounter.getEncounterDatetime()); + } else { + period.setStart(visit.getStartDatetime()); + period.setEnd(visit.getStopDatetime()); + } + + encounter.setPeriod(period); + encounter.setStatus(Encounter.EncounterStatus.FINISHED); + Coding coding = new Coding(); + coding.setSystem(Constants.FHIR_ENC_CLASS_SYSTEM); + + String encounterClassDetails = getEncounterClass(visit.getVisitType().getName()); + String[] parts = encounterClassDetails.split(","); + coding.setCode(parts[0]); + coding.setDisplay(parts[1]); + encounter.setClass_(coding); + encounter.setId(emrEncounter.getUuid()); + + //TODO - add encounter.location + return encounter; + } + + private static String getEncounterClass(String visitType) { + String encClassDetails = visitTypeMap.get(visitType.toLowerCase()); + if (encClassDetails == null) { + encClassDetails = visitTypeMap.get("OPD"); + } + return encClassDetails; + } + + public static Patient mapToPatient(org.openmrs.Patient emrPatient) { + Patient patient = new Patient(); + patient.setId(emrPatient.getUuid()); + patient.setGender(FHIRUtils.getGender(emrPatient.getGender())); + HumanName humanName = mapToHumanName(emrPatient.getPersonName()); + patient.addName(humanName); + patient.setIdentifier(FHIRUtils.getEmrPatientIdentifiers(emrPatient)); + List patientIdentifiers = emrPatient.getActiveIdentifiers(); + return patient; + } + + private static HumanName mapToHumanName(PersonName personName) { + HumanName humanName = new HumanName(); + humanName.setFamily(personName.getFamilyName()); + humanName.addGiven(personName.getGivenName()); + humanName.setText(personName.getFullName()); + return humanName; + } + + public static Practitioner mapToPractitioner(EncounterProvider encounterProvider) { + Practitioner practitioner = new Practitioner(); + Provider provider = encounterProvider.getProvider(); + practitioner.setId(provider.getIdentifier()); + List attributes = provider.getAttributes().stream().filter( + providerAttribute -> providerAttribute.getAttributeType().getName().equalsIgnoreCase("prefix")) + .collect(Collectors.toList()); + List prefixes = attributes.stream().map(p -> new StringType(p.getValue().toString())).collect(Collectors.toList()); + HumanName humanName = mapToHumanName(provider.getPerson().getPersonName()); + humanName.setPrefix(prefixes); + practitioner.setName(Collections.singletonList(humanName)); + //TODO map identifier + return practitioner; + } + + public static MedicationRequest mapToMedicationRequest(DrugOrder order, + Reference patientRef, + IBaseResource author, + Medication medication) { + MedicationRequest medReq = new MedicationRequest(); + medReq.setId(order.getOrderId().toString()); + + medReq.setStatus(MedicationRequest.MedicationRequestStatus.ACTIVE); + medReq.setIntent(MedicationRequest.MedicationRequestIntent.ORDER); + + Reference authorRef = new Reference(); + authorRef.setResource(author); + medReq.setRequester(authorRef); + medReq.setAuthoredOn(order.getDateCreated()); + medReq.setSubject(patientRef); + + if (medication == null) { + CodeableConcept medCodeableConcept = new CodeableConcept(); + medCodeableConcept.setText(order.getDrugNonCoded()); + medReq.setMedication(medCodeableConcept); + } else { + Reference medicationRef = FHIRUtils.getReferenceToResource(medication); + medicationRef.setResource(medication); + medReq.setMedication(medicationRef); + } + + medReq.addDosageInstruction().setText(getDosingInstruction(order)); + if (!Utils.isBlank(order.getCommentToFulfiller())) { + //TODO - should be in dispense instruction + medReq.addNote().setText(order.getCommentToFulfiller()); + } + + //NOTE: Openmrs does not have means to adding specific reason but we can potentially get something from + //dosage instruction as text + //medReq.setReasonReference(some condition); + return medReq; + } + + public static Medication mapToMedication(DrugOrder order) { + if (!Utils.isBlank(order.getDrugNonCoded())) { + return null; + } + Medication medication = new Medication(); + Drug drug = order.getDrug(); + String drugId, drugName; + List codings; + if (drug == null) { + drugId = order.getConcept().getUuid(); + drugName = order.getConcept().getName().getName(); + codings = order.getConcept().getConceptMappings().stream().map(cm -> { + return mapToCodeableConcept(cm.getConceptReferenceTerm()); + }).collect(Collectors.toList()); + } else { + drugId = drug.getUuid(); + drugName = drug.getDisplayName(); + codings = mapToCodeableConcept(drug.getDrugReferenceMaps()); + } + medication.setId(drugId); + CodeableConcept concept = new CodeableConcept(); + concept.setText(drugName); + if (codings != null && !codings.isEmpty()) { + concept.setCoding(codings); + } + medication.setCode(concept); + return medication; + } + + private static Coding mapToCodeableConcept(ConceptReferenceTerm crt) { + Coding coding = new Coding(); + coding.setSystem(getCodingSystem(crt.getConceptSource())); + coding.setCode(crt.getCode()); + coding.setDisplay(crt.getName()); + return coding; + } + + private static List mapToCodeableConcept(Set drugReferenceMaps) { + return drugReferenceMaps.stream().map(drm -> { + Coding coding = new Coding(); + coding.setSystem(getCodingSystem(drm.getConceptReferenceTerm().getConceptSource())); + coding.setCode(drm.getConceptReferenceTerm().getCode()); + coding.setDisplay(drm.getConceptReferenceTerm().getName()); + return coding; + }).collect(Collectors.toList()); + } + + private static String getCodingSystem(ConceptSource conceptSource) { + //TODO + return conceptSource.getHl7Code(); + } + + + private static String getDosingInstruction(DrugOrder order) { + boolean bahmniSystem = order.getDosingType().getName().equals("org.openmrs.module.bahmniemrapi.drugorder.dosinginstructions.FlexibleDosingInstructions"); + if (bahmniSystem) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + JsonNode jsonNode = objectMapper.readTree(order.getDosingInstructions()); + return jsonNode.get("instructions").asText(); + } catch (IOException e) { + e.printStackTrace(); + return ""; + } + } + return order.getDosingInstructions(); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java new file mode 100644 index 00000000..7cfaa159 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -0,0 +1,118 @@ +package org.bahmni.module.hip.web.service; + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Enumerations; +import org.hl7.fhir.r4.model.Identifier; +import org.hl7.fhir.r4.model.Meta; +import org.hl7.fhir.r4.model.Organization; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.hl7.fhir.r4.model.Resource; + +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class FHIRUtils { + private static Map genderMap = new HashMap() {{ + put("M", Enumerations.AdministrativeGender.MALE); + put("F", Enumerations.AdministrativeGender.FEMALE); + put("O", Enumerations.AdministrativeGender.OTHER); + put("U", Enumerations.AdministrativeGender.UNKNOWN); + }}; + + public static Bundle createBundle(Date forDate, String bundleId, OrgContext hipContext) { + Bundle bundle = new Bundle(); + bundle.setId(bundleId); + bundle.setTimestamp(forDate); + + Identifier identifier = new Identifier(); + identifier.setSystem(Utils.ensureTrailingSlash(hipContext.getWebUrl().trim()) + "/bundle"); + identifier.setValue(bundleId); + bundle.setIdentifier(identifier); + + Meta bundleMeta = getMeta(forDate); + bundle.setMeta(bundleMeta); + bundle.setType(Bundle.BundleType.DOCUMENT); + return bundle; + } + + public static Meta getMeta(Date forDate) { + Meta meta = new Meta(); + meta.setLastUpdated(forDate); + meta.setVersionId("1.0"); //TODO + return meta; + } + + public static Identifier getIdentifier(String id, String domain, String resType) { + Identifier identifier = new Identifier(); + identifier.setSystem(Utils.ensureTrailingSlash(domain) + resType); + identifier.setValue(id); + return identifier; + } + + public static CodeableConcept getPrescriptionType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("440545006"); + coding.setDisplay("Prescription record"); + return type; + } + + public static void addToBundleEntry(Bundle bundle, Resource resource, boolean useIdPart) { + String resourceType = resource.getResourceType().toString(); + String id = useIdPart ? resource.getIdElement().getIdPart() : resource.getId(); + bundle.addEntry() + .setFullUrl(resourceType + "/" + id) + .setResource(resource); + } + + private static String getHospitalSystemForType(String hospitalDomain, String type) { + return String.format(Constants.HOSPITAL_SYSTEM, hospitalDomain, type); + } + + public static Organization createOrgInstance(String hfrId, String hfrName, String hfrSystem) { + Organization organization = new Organization(); + organization.setId(hfrId); + organization.setName(hfrName); + Identifier identifier = organization.addIdentifier(); + identifier.setSystem(hfrSystem); + identifier.setValue(hfrId); + identifier.setUse(Identifier.IdentifierUse.OFFICIAL); + return organization; + } + + public static Reference getReferenceToResource(Resource res) { + Reference ref = new Reference(); + ref.setResource(res); + return ref; + } + + public static List getEmrPatientIdentifiers(org.openmrs.Patient emrPatient) { + return emrPatient.getIdentifiers().stream().map(id -> { + Identifier identifier = new Identifier(); + identifier.setValue(id.getIdentifier()); + return identifier; + }).collect(Collectors.toList()); + } + + public static Enumerations.AdministrativeGender getGender(String gender) { + Enumerations.AdministrativeGender patientGender = genderMap.get(gender.toUpperCase()); + return patientGender != null ? patientGender : Enumerations.AdministrativeGender.UNKNOWN; + } + + + public static String getDisplay(Practitioner author) { + String prefixAsSingleString = author.getNameFirstRep().getPrefixAsSingleString(); + if ("".equals(prefixAsSingleString)) { + return author.getNameFirstRep().getText(); + } else { + return prefixAsSingleString.concat(" ").concat(author.getNameFirstRep().getText()); + } + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java new file mode 100644 index 00000000..83e6ee5d --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java @@ -0,0 +1,18 @@ +package org.bahmni.module.hip.web.service; + +import lombok.Builder; +import lombok.Getter; +import org.hl7.fhir.r4.model.Organization; +import org.openmrs.VisitType; + +@Builder +@Getter +public class OrgContext { + private Organization organization; + private String webUrl; + + public Class getCareContextType() { + //Hardcoded right now. Should also deal with programType, visit or visitType. + return VisitType.class; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java new file mode 100644 index 00000000..0003ea57 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -0,0 +1,113 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.web.model.CareContext; +import org.bahmni.module.hip.web.model.Prescription; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.Medication; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Reference; +import org.openmrs.DrugOrder; + +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; + +public class PrescriptionGenerator { + private final OrgContext orgContext; + private final org.openmrs.Encounter emrEncounter; + private final List drugOrders; + + public PrescriptionGenerator(OrgContext orgContext, org.openmrs.Encounter emrEncounter, List drugOrders) { + this.orgContext = orgContext; + this.emrEncounter = emrEncounter; + this.drugOrders = drugOrders; + } + + public Prescription generate() throws Exception { + Bundle prescriptionBundle = createPrescriptionBundle(emrEncounter.getPatient(), orgContext); + return Prescription.builder() + .bundle(prescriptionBundle) + .careContext(getCareContext(emrEncounter)) + .build(); + } + + private CareContext getCareContext(org.openmrs.Encounter emrEncounter) { + Class cls = orgContext.getCareContextType(); + if (cls.getName().equals("Visit")) { + return CareContext.builder() + .careContextReference(emrEncounter.getVisit().getUuid()) + .careContextType("Visit").build(); + } else { + return CareContext.builder() + .careContextReference(emrEncounter.getVisit().getVisitType().getName()) + .careContextType("VisitType").build(); + } + } + + private Bundle createPrescriptionBundle(org.openmrs.Patient emrPatient, OrgContext hipContext) throws Exception { + String prescriptionId = prescriptionId(); + Bundle bundle = FHIRUtils.createBundle(emrEncounter.getEncounterDatetime(), prescriptionId, orgContext); + + Patient patientResource = FHIRResourceMapper.mapToPatient(emrPatient); + Reference patientRef = FHIRUtils.getReferenceToResource(patientResource); + + //add composition first + Composition composition = new Composition(); + composition.setId(UUID.randomUUID().toString()); + composition.setDate(bundle.getTimestamp()); + composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), hipContext.getWebUrl(), "document")); + composition.setStatus(Composition.CompositionStatus.FINAL); + CodeableConcept prescriptionType = FHIRUtils.getPrescriptionType(); + composition.setType(prescriptionType); + composition.setTitle("Prescription"); + FHIRUtils.addToBundleEntry(bundle, composition, false); + + //add practitioner to bundle to composition.author + List practitioners = emrEncounter.getEncounterProviders().stream().map(provider -> { + return FHIRResourceMapper.mapToPractitioner(provider); + }).collect(Collectors.toList()); + + practitioners.stream().forEach(practitioner -> { + FHIRUtils.addToBundleEntry(bundle, practitioner, false); + Reference authorRef = composition.addAuthor(); + authorRef.setResource(practitioner); + authorRef.setDisplay(FHIRUtils.getDisplay(practitioner)); + }); + + //add patient to bundle and the ref to composition.subject + FHIRUtils.addToBundleEntry(bundle, patientResource, false); + composition.setSubject(patientRef); + + //add encounter to bundle and ref to composition + Encounter encounter = FHIRResourceMapper.mapToEncounter(emrEncounter, composition.getDate()); + encounter.setSubject(patientRef); + FHIRUtils.addToBundleEntry(bundle, encounter, false); + composition.setEncounter(FHIRUtils.getReferenceToResource(encounter)); + + Composition.SectionComponent section = composition.addSection(); + section.setTitle("OPD Prescription"); + section.setCode(prescriptionType); + + for (DrugOrder order: drugOrders) { + Medication medication = FHIRResourceMapper.mapToMedication(order); + if (medication != null) { + FHIRUtils.addToBundleEntry(bundle, medication, false); + } + MedicationRequest medicationRequest = FHIRResourceMapper.mapToMedicationRequest(order, patientRef, composition.getAuthorFirstRep().getResource(), medication); + FHIRUtils.addToBundleEntry(bundle, medicationRequest, false); + section.getEntry().add(FHIRUtils.getReferenceToResource(medicationRequest)); + } + return bundle; + } + + private String prescriptionId() { + return "PR-" + emrEncounter.getEncounterId().toString(); + } + + +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java new file mode 100644 index 00000000..a6fab861 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -0,0 +1,109 @@ +package org.bahmni.module.hip.web.service; + + +import org.apache.log4j.Logger; +import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; +import org.bahmni.module.hip.web.controller.HipContext; +import org.bahmni.module.hip.web.model.Prescription; +import org.hl7.fhir.r4.model.Organization; +import org.openmrs.DrugOrder; +import org.openmrs.Encounter; +import org.openmrs.OrderType; +import org.openmrs.Patient; +import org.openmrs.api.AdministrationService; +import org.openmrs.api.context.Context; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +@Service +public class PrescriptionService { + private static final Logger log = Logger.getLogger(PrescriptionService.class); + + public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { + PrescriptionOrderDao prescriptionDao = getPrescriptionDao(); + Patient patient = Context.getPatientService().getPatientByUuid(patientIdUuid); + OrderType drugOrderType = Context.getOrderService().getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); + List drugOrders = prescriptionDao.getDrugOrders(patient, fromDate, toDate, drugOrderType); + return mapToPrescriptions(drugOrders); + } + + public String getEncounterUuidForOrder(DrugOrder order) { + return order.getEncounter().getUuid(); + } + + private List mapToPrescriptions(List drugOrders) { + if (drugOrders.isEmpty()) { + return new ArrayList<>(); + } + +// Map> prescriptionsMap = new HashMap<>(); +// for (DrugOrder drugOrder : drugOrders) { +// String encounterUuid = drugOrder.getEncounter().getUuid(); +// List drugOrdersInPrescription = prescriptionsMap.get(encounterUuid); +// if (drugOrdersInPrescription != null) { +// drugOrdersInPrescription.add(drugOrder); +// } else { +// ArrayList prescriptionOrders = new ArrayList<>(); +// prescriptionOrders.add(drugOrder); +// prescriptionsMap.put(encounterUuid, prescriptionOrders); +// } +// } + + Map> prescriptionsMap = Optional.ofNullable(drugOrders) + .orElseGet(ArrayList::new) + .stream() + .collect(Collectors.groupingBy(this::getEncounterUuidForOrder)); + + List prescriptions = new ArrayList<>(); + prescriptionsMap.forEach((key,value) -> { + try { + prescriptions.add(createPrescription(value)); + } catch (Exception e) { + log.error("Error occurred while trying to create Prescription", e); + } + }); + + return prescriptions; + } + + private Prescription createPrescription(List drugOrders) throws Exception { + Encounter encounter = drugOrders.get(0).getEncounter(); + return new PrescriptionGenerator(getOrgContext(encounter), encounter, drugOrders).generate(); + } + + private OrgContext getOrgContext(Encounter encounter) { + Organization organization = getOrganization(encounter); + return OrgContext.builder() + .organization(organization) + .webUrl(getWebUrl()) + .build(); + } + + private String getWebUrl() { + AdministrationService administrationService = Context.getAdministrationService(); + return administrationService.getGlobalProperty(Constants.PROP_HFR_URL); + } + + private PrescriptionOrderDao getPrescriptionDao() { + List registeredComponents = Context.getRegisteredComponents(PrescriptionOrderDao.class); + if (registeredComponents != null & !registeredComponents.isEmpty()) { + return registeredComponents.get(0); + } + return null; + } + + + private Organization getOrganization(Encounter encounter) { + AdministrationService administrationService = Context.getAdministrationService(); + String hfrId = administrationService.getGlobalProperty(Constants.PROP_HFR_ID); + String hfrName = administrationService.getGlobalProperty(Constants.PROP_HFR_NAME); + String hfrSystem = administrationService.getGlobalProperty(Constants.PROP_HFR_SYSTEM); + return FHIRUtils.createOrgInstance(hfrId, hfrName, hfrSystem); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Utils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Utils.java new file mode 100644 index 00000000..148901f3 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Utils.java @@ -0,0 +1,19 @@ +package org.bahmni.module.hip.web.service; + +public class Utils { + public static String ensureTrailingSlash(String url) { + return url.endsWith("/") ? url : url + "/"; + } + + public static boolean isBlank(String value) { + if (value == null) { + return true; + } + + if ("".equals(value.trim())) { + return true; + } + + return false; + } +} diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 7d59e69d..1ffaae92 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -41,17 +41,43 @@ /Required Privileges --> - - @MODULE_ID@.someProperty - + bahmniHip.healthFacilityRegistryId + HFR_ID - A description of the global property goes here. The description - should explain enough for administrators to understand the purpose - and possible values for the global property. + Unique identifier from the Health Facility Registry - /Required Global Properties --> + + bahmniHip.healthFacilityName + HFR_NAME + + Name of the facility as in Health Facility Registry + + + + bahmniHip.healthFacilitySystem + http://affinitydomain.com/hfr + + The system URL where Health Facility Registry is registered + + + + bahmniHip.practitionerSystem + http://affinitydomain.com/practitioner + + The system URL where Practitioners are registered + + + + bahmniHip.healthFacilityUrl + http://www.myorg.com/ + + Website URL of the organization/hip + + + drugOrders List practitioners = getPractitionersFrom(emrEncounter); + + // TODO: DrugOrders -> Get the first encounter -> getPatient -> Patient & PatientReference //add patient to bundle and the ref to composition.subject Patient patientResource = FHIRResourceMapper.mapToPatient(emrPatient); Reference patientRef = FHIRUtils.getReferenceToResource(patientResource); + // TODO: DrugOrders -> Get the first encounter -> ** Dependency on patientRef //add encounter to bundle and ref to composition Encounter fhirEncounter = FHIRResourceMapper - .mapToEncounter(emrEncounter, composition.getDate()) + .mapToEncounter(emrEncounter, emrEncounter.getEncounterDatetime()) .setSubject(patientRef); + // TODO: PAUSE practitioners .forEach(practitioner -> composition .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); List fhirMedications = fhirMedicationFor(drugOrders); - List fhirMedicationRequests = medicationRequestsFor(drugOrders, composition, patientRef); + List fhirMedicationRequests = medicationRequestsFor(drugOrders, practitioners.get(0), patientRef); //Populate Composition composition.setEncounter(FHIRUtils.getReferenceToResource(fhirEncounter)); @@ -87,11 +93,16 @@ private Bundle createPrescriptionBundle(org.openmrs.Encounter emrEncounter, OrgC return bundle; } - private List medicationRequestsFor(List drugOrders, Composition composition, Reference patientRef) { + private Bundle initializeBundle(org.openmrs.Encounter emrEncounter) { + OrgContext orgContext = getOrgContext(); + return FHIRUtils.createBundle(emrEncounter.getEncounterDatetime(), prescriptionId(emrEncounter), orgContext); + } + + private List medicationRequestsFor(List drugOrders, Practitioner practitioner, Reference patientRef) { return drugOrders .stream() .map(drugOrder -> FHIRResourceMapper - .mapToMedicationRequest(drugOrder, patientRef, composition.getAuthorFirstRep().getResource(), FHIRResourceMapper.mapToMedication(drugOrder))) + .mapToMedicationRequest(drugOrder, patientRef, practitioner, FHIRResourceMapper.mapToMedication(drugOrder))) .collect(Collectors.toList()); } @@ -110,11 +121,13 @@ private List getPractitionersFrom(org.openmrs.Encounter emrEncount .collect(Collectors.toList()); } - private Composition initializeComposition(String webUrl, Date encounterTimestamp) { + private Composition initializeComposition(org.openmrs.Encounter encounterTimestamp) { + OrgContext orgContext = getOrgContext(); + Composition composition = new Composition(); composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp); - composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webUrl, "document")); + composition.setDate(encounterTimestamp.getEncounterDatetime()); + composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), orgContext.getWebUrl(), "document")); composition.setStatus(Composition.CompositionStatus.FINAL); composition.setType(FHIRUtils.getPrescriptionType()); composition.setTitle("Prescription"); From c6a06acdbca52be6493909b072ca6d31d42d0cc0 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 15:33:42 +0530 Subject: [PATCH 035/264] HIP-62 | Raghavi/Abhijeet | Adds a PrescriptionRequest domain which represents the OPENMRS form of what a prescription means --- .../PrescriptionGenerationRequest.java | 26 +++++++++++++++++ .../web/service/PrescriptionGenerator.java | 28 ++++++++----------- .../hip/web/service/PrescriptionService.java | 15 ++++++---- 3 files changed, 46 insertions(+), 23 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java new file mode 100644 index 00000000..2e3825d2 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java @@ -0,0 +1,26 @@ +package org.bahmni.module.hip.web.service; + +import lombok.Getter; +import org.hibernate.validator.constraints.NotEmpty; +import org.openmrs.DrugOrder; +import org.openmrs.Encounter; +import org.openmrs.EncounterProvider; +import org.openmrs.Patient; + +import java.util.List; +import java.util.Set; + +@Getter +class PrescriptionGenerationRequest { + private Encounter encounter; + private Set encounterProviders; + private List drugOrders; + private Patient patient; + + PrescriptionGenerationRequest(@NotEmpty List drugOrders) { + this.encounter = drugOrders.get(0).getEncounter(); + this.encounterProviders = this.encounter.getEncounterProviders(); + this.patient = this.encounter.getPatient(); + this.drugOrders = drugOrders; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java index 6d558341..eab44bdb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -1,7 +1,6 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.model.Prescription; -import org.hibernate.validator.constraints.NotEmpty; import org.hl7.fhir.r4.model.*; import org.openmrs.DrugOrder; import org.openmrs.api.AdministrationService; @@ -9,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; import java.util.List; import java.util.Objects; import java.util.UUID; @@ -24,42 +22,38 @@ public PrescriptionGenerator(CareContextService careContextService) { this.careContextService = careContextService; } - Prescription generate(@NotEmpty List drugOrders) { - org.openmrs.Encounter emrEncounter = drugOrders.get(0).getEncounter(); + Prescription generate(PrescriptionGenerationRequest prescriptionGenerationRequest) { - Bundle prescriptionBundle = createPrescriptionBundle(drugOrders); + Bundle prescriptionBundle = createPrescriptionBundle(prescriptionGenerationRequest); return Prescription.builder() .bundle(prescriptionBundle) - .careContext(careContextService.careContextFor(emrEncounter, getOrgContext().getCareContextType())) + .careContext(careContextService.careContextFor(prescriptionGenerationRequest.getEncounter(), getOrgContext().getCareContextType())) .build(); } - private Bundle createPrescriptionBundle(List drugOrders) { - org.openmrs.Encounter emrEncounter = drugOrders.get(0).getEncounter(); - org.openmrs.Patient emrPatient = emrEncounter.getPatient(); + private Bundle createPrescriptionBundle(PrescriptionGenerationRequest prescriptionGenerationRequest) { - - Bundle bundle = initializeBundle(emrEncounter); + Bundle bundle = initializeBundle(prescriptionGenerationRequest.getEncounter()); //Plain composition initialized - Composition composition = initializeComposition(emrEncounter); + Composition composition = initializeComposition(prescriptionGenerationRequest.getEncounter()); Composition.SectionComponent compositionSection = composition.addSection(); //Construct practitioners // TODO: Create a PractitionerService --> drugOrders - List practitioners = getPractitionersFrom(emrEncounter); + List practitioners = getPractitionersFrom(prescriptionGenerationRequest.getEncounter()); // TODO: DrugOrders -> Get the first encounter -> getPatient -> Patient & PatientReference //add patient to bundle and the ref to composition.subject - Patient patientResource = FHIRResourceMapper.mapToPatient(emrPatient); + Patient patientResource = FHIRResourceMapper.mapToPatient(prescriptionGenerationRequest.getPatient()); Reference patientRef = FHIRUtils.getReferenceToResource(patientResource); // TODO: DrugOrders -> Get the first encounter -> ** Dependency on patientRef //add encounter to bundle and ref to composition Encounter fhirEncounter = FHIRResourceMapper - .mapToEncounter(emrEncounter, emrEncounter.getEncounterDatetime()) + .mapToEncounter(prescriptionGenerationRequest.getEncounter(), prescriptionGenerationRequest.getEncounter().getEncounterDatetime()) .setSubject(patientRef); // TODO: PAUSE @@ -67,8 +61,8 @@ private Bundle createPrescriptionBundle(List drugOrders) { .forEach(practitioner -> composition .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); - List fhirMedications = fhirMedicationFor(drugOrders); - List fhirMedicationRequests = medicationRequestsFor(drugOrders, practitioners.get(0), patientRef); + List fhirMedications = fhirMedicationFor(prescriptionGenerationRequest.getDrugOrders()); + List fhirMedicationRequests = medicationRequestsFor(prescriptionGenerationRequest.getDrugOrders(), practitioners.get(0), patientRef); //Populate Composition composition.setEncounter(FHIRUtils.getReferenceToResource(fhirEncounter)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index e39dca34..4c4a029f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -3,7 +3,6 @@ import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.Prescription; -import org.hibernate.validator.constraints.NotEmpty; import org.openmrs.DrugOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -47,14 +46,18 @@ private List prescriptionsFor(List drugOrders) { .stream() .collect(Collectors.groupingBy(this::getEncounterUuidForOrder)); - return encounterDrugOrderMap.values() + List prescriptionGenerationRequests = encounterDrugOrderMap.values() .stream() - .map(this::createPrescription) + .map(PrescriptionGenerationRequest::new) .collect(Collectors.toList()); - } - private Prescription createPrescription(@NotEmpty List drugOrders) { - return prescriptionGenerator.generate(drugOrders); + return prescriptionGenerationRequests + .stream() + .map(this::generatePrescriptionFor) + .collect(Collectors.toList()); } + private Prescription generatePrescriptionFor(PrescriptionGenerationRequest prescriptionGenerationRequest) { + return prescriptionGenerator.generate(prescriptionGenerationRequest); + } } From f0eb08d15efa83719e326dabc43034da84ca8c88 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 15:35:44 +0530 Subject: [PATCH 036/264] HIP-62 | Abhijeet/Raghavi | 1. Moves PrescriptionGenerationRequest to models --- .../{service => model}/PrescriptionGenerationRequest.java | 6 +++--- .../module/hip/web/service/PrescriptionGenerator.java | 1 + .../bahmni/module/hip/web/service/PrescriptionService.java | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) rename omod/src/main/java/org/bahmni/module/hip/web/{service => model}/PrescriptionGenerationRequest.java (79%) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java b/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java similarity index 79% rename from omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java rename to omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java index 2e3825d2..561b5041 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerationRequest.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java @@ -1,4 +1,4 @@ -package org.bahmni.module.hip.web.service; +package org.bahmni.module.hip.web.model; import lombok.Getter; import org.hibernate.validator.constraints.NotEmpty; @@ -11,13 +11,13 @@ import java.util.Set; @Getter -class PrescriptionGenerationRequest { +public class PrescriptionGenerationRequest { private Encounter encounter; private Set encounterProviders; private List drugOrders; private Patient patient; - PrescriptionGenerationRequest(@NotEmpty List drugOrders) { + public PrescriptionGenerationRequest(@NotEmpty List drugOrders) { this.encounter = drugOrders.get(0).getEncounter(); this.encounterProviders = this.encounter.getEncounterProviders(); this.patient = this.encounter.getPatient(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java index eab44bdb..e69d24e5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.model.Prescription; +import org.bahmni.module.hip.web.model.PrescriptionGenerationRequest; import org.hl7.fhir.r4.model.*; import org.openmrs.DrugOrder; import org.openmrs.api.AdministrationService; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 4c4a029f..13ef21ba 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -3,6 +3,7 @@ import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.Prescription; +import org.bahmni.module.hip.web.model.PrescriptionGenerationRequest; import org.openmrs.DrugOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; From b5b4b6e5efdca29f7e69b24a4b62228afcd173e2 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 16:27:47 +0530 Subject: [PATCH 037/264] HIP-62 | Abhijeet/Raghavi | 1. Adds FhirPriscription model which converts from openmrs model to fhir model and uses it to make composition and bundle --- .../controller/PrescriptionController.java | 6 +- ....java => BundledPrescriptionResponse.java} | 2 +- .../hip/web/model/FhirPrescription.java | 84 +++++++++++++++++++ ...nRequest.java => OpenMrsPrescription.java} | 4 +- .../web/service/PrescriptionGenerator.java | 66 ++++++--------- .../hip/web/service/PrescriptionService.java | 18 ++-- 6 files changed, 125 insertions(+), 55 deletions(-) rename omod/src/main/java/org/bahmni/module/hip/web/model/{Prescription.java => BundledPrescriptionResponse.java} (91%) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java rename omod/src/main/java/org/bahmni/module/hip/web/model/{PrescriptionGenerationRequest.java => OpenMrsPrescription.java} (84%) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 009541d4..9b8945da 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -1,7 +1,7 @@ package org.bahmni.module.hip.web.controller; import org.apache.log4j.Logger; -import org.bahmni.module.hip.web.model.Prescription; +import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; import org.bahmni.module.hip.web.service.PrescriptionService; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; @@ -36,10 +36,10 @@ public PrescriptionController(HipContext hipContext, PrescriptionService prescri public @ResponseBody ResponseEntity get(@RequestParam String patientId) { try { - List prescriptions = prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); + List bundledPrescriptionRespons = prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(prescriptions); + .body(bundledPrescriptionRespons); } catch (Exception e) { log.error("Error occurred while trying to call prescriptionService.getPrescriptions", e); return ResponseEntity.badRequest() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java similarity index 91% rename from omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java rename to omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java index ed65e880..dffe81a8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/Prescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java @@ -9,7 +9,7 @@ @Builder @Getter @Setter -public class Prescription { +public class BundledPrescriptionResponse { private CareContext careContext; private Bundle bundle; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java new file mode 100644 index 00000000..1aa3968a --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -0,0 +1,84 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import org.bahmni.module.hip.web.service.FHIRResourceMapper; +import org.bahmni.module.hip.web.service.FHIRUtils; +import org.hl7.fhir.r4.model.*; +import org.openmrs.DrugOrder; +import org.openmrs.EncounterProvider; + +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +@Getter +public class FhirPrescription { + + private Encounter encounter; + private List practitioners; + private Patient patient; + private Reference patientReference; + private List medications; + private List medicationRequests; + + private FhirPrescription(Encounter encounter, List practitioners, Patient patient, Reference patientReference, List medications, List medicationRequests) { + this.encounter = encounter; + this.practitioners = practitioners; + this.patient = patient; + this.patientReference = patientReference; + this.medications = medications; + this.medicationRequests = medicationRequests; + } + + public static FhirPrescription from(OpenMrsPrescription openMrsPrescription) { + Patient patient = FHIRResourceMapper.mapToPatient(openMrsPrescription.getPatient()); + Reference patientReference = FHIRUtils.getReferenceToResource(patient); + Encounter encounter = encounterFrom(openMrsPrescription.getEncounter(), patientReference); + List practitioners = getPractitionersFrom(openMrsPrescription.getEncounterProviders()); + List medicationRequests = medicationRequestsFor(openMrsPrescription.getDrugOrders(), patientReference, practitioners.get(0)); + List medications = medicationsFor(openMrsPrescription.getDrugOrders()); + + return new FhirPrescription(encounter, practitioners, patient, patientReference, medications, medicationRequests); + } + + private static Encounter encounterFrom(org.openmrs.Encounter openMRSEncounter, Reference patientReference){ + return FHIRResourceMapper + .mapToEncounter(openMRSEncounter, openMRSEncounter.getEncounterDatetime()) + .setSubject(patientReference); + } + + private static List medicationRequestsFor( + List drugOrders, + Reference patientReference, + Practitioner practitioner) { + return drugOrders + .stream() + .map(drugOrder -> { + Medication medication = FHIRResourceMapper.mapToMedication(drugOrder); + return FHIRResourceMapper.mapToMedicationRequest( + drugOrder, + patientReference, + practitioner, + medication + ); + }) + .collect(Collectors.toList()); + } + + private static List medicationsFor(List drugOrders) { + return drugOrders + .stream() + .map(FHIRResourceMapper::mapToMedication) + .filter(medication -> !Objects.isNull(medication)) + .collect(Collectors.toList()); + } + + private static List getPractitionersFrom(Set encounterProviders) { + return encounterProviders + .stream() + .map(FHIRResourceMapper::mapToPractitioner) + .collect(Collectors.toList()); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java similarity index 84% rename from omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java rename to omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java index 561b5041..a243d17e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionGenerationRequest.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java @@ -11,13 +11,13 @@ import java.util.Set; @Getter -public class PrescriptionGenerationRequest { +public class OpenMrsPrescription { private Encounter encounter; private Set encounterProviders; private List drugOrders; private Patient patient; - public PrescriptionGenerationRequest(@NotEmpty List drugOrders) { + public OpenMrsPrescription(@NotEmpty List drugOrders) { this.encounter = drugOrders.get(0).getEncounter(); this.encounterProviders = this.encounter.getEncounterProviders(); this.patient = this.encounter.getPatient(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java index e69d24e5..ebecc658 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -1,7 +1,8 @@ package org.bahmni.module.hip.web.service; -import org.bahmni.module.hip.web.model.Prescription; -import org.bahmni.module.hip.web.model.PrescriptionGenerationRequest; +import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.FhirPrescription; +import org.bahmni.module.hip.web.model.OpenMrsPrescription; import org.hl7.fhir.r4.model.*; import org.openmrs.DrugOrder; import org.openmrs.api.AdministrationService; @@ -23,68 +24,53 @@ public PrescriptionGenerator(CareContextService careContextService) { this.careContextService = careContextService; } - Prescription generate(PrescriptionGenerationRequest prescriptionGenerationRequest) { + BundledPrescriptionResponse generate(OpenMrsPrescription openMrsPrescription) { - Bundle prescriptionBundle = createPrescriptionBundle(prescriptionGenerationRequest); + Bundle prescriptionBundle = createPrescriptionBundle(openMrsPrescription); - return Prescription.builder() + return BundledPrescriptionResponse.builder() .bundle(prescriptionBundle) - .careContext(careContextService.careContextFor(prescriptionGenerationRequest.getEncounter(), getOrgContext().getCareContextType())) + .careContext(careContextService.careContextFor(openMrsPrescription.getEncounter(), getOrgContext().getCareContextType())) .build(); } - private Bundle createPrescriptionBundle(PrescriptionGenerationRequest prescriptionGenerationRequest) { + private Bundle createPrescriptionBundle(OpenMrsPrescription openMrsPrescription) { - Bundle bundle = initializeBundle(prescriptionGenerationRequest.getEncounter()); + FhirPrescription fhirPrescription = FhirPrescription.from(openMrsPrescription); //Plain composition initialized - Composition composition = initializeComposition(prescriptionGenerationRequest.getEncounter()); + Composition composition = initializeComposition(openMrsPrescription.getEncounter()); Composition.SectionComponent compositionSection = composition.addSection(); - //Construct practitioners - // TODO: Create a PractitionerService --> drugOrders - List practitioners = getPractitionersFrom(prescriptionGenerationRequest.getEncounter()); - - - // TODO: DrugOrders -> Get the first encounter -> getPatient -> Patient & PatientReference - //add patient to bundle and the ref to composition.subject - Patient patientResource = FHIRResourceMapper.mapToPatient(prescriptionGenerationRequest.getPatient()); - Reference patientRef = FHIRUtils.getReferenceToResource(patientResource); - - // TODO: DrugOrders -> Get the first encounter -> ** Dependency on patientRef - //add encounter to bundle and ref to composition - Encounter fhirEncounter = FHIRResourceMapper - .mapToEncounter(prescriptionGenerationRequest.getEncounter(), prescriptionGenerationRequest.getEncounter().getEncounterDatetime()) - .setSubject(patientRef); - - // TODO: PAUSE - practitioners + fhirPrescription.getPractitioners() .forEach(practitioner -> composition .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); - List fhirMedications = fhirMedicationFor(prescriptionGenerationRequest.getDrugOrders()); - List fhirMedicationRequests = medicationRequestsFor(prescriptionGenerationRequest.getDrugOrders(), practitioners.get(0), patientRef); - - //Populate Composition - composition.setEncounter(FHIRUtils.getReferenceToResource(fhirEncounter)); - composition.setSubject(patientRef); + composition + .setEncounter(FHIRUtils.getReferenceToResource(fhirPrescription.getEncounter())) + .setSubject(fhirPrescription.getPatientReference()); compositionSection .setTitle("OPD Prescription") .setCode(FHIRUtils.getPrescriptionType()); - fhirMedicationRequests + fhirPrescription.getMedicationRequests() .stream() .map(FHIRUtils::getReferenceToResource) .forEach(compositionSection::addEntry); - FHIRUtils.addToBundleEntry(bundle, composition, false); - FHIRUtils.addToBundleEntry(bundle, fhirEncounter, false); - FHIRUtils.addToBundleEntry(bundle, practitioners, false); - FHIRUtils.addToBundleEntry(bundle, patientResource, false); - FHIRUtils.addToBundleEntry(bundle, fhirMedications, false); - FHIRUtils.addToBundleEntry(bundle, fhirMedicationRequests, false); + return wrapInBundle(openMrsPrescription, fhirPrescription, composition); + } + private Bundle wrapInBundle(OpenMrsPrescription openMrsPrescription, FhirPrescription fhirPrescription, Composition composition) { + Bundle bundle = initializeBundle(openMrsPrescription.getEncounter()); + + FHIRUtils.addToBundleEntry(bundle, composition, false); + FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getEncounter(), false); + FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getPractitioners(), false); + FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getPatient(), false); + FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getMedications(), false); + FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getMedicationRequests(), false); return bundle; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 13ef21ba..1a07a613 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -2,8 +2,8 @@ import org.apache.log4j.Logger; -import org.bahmni.module.hip.web.model.Prescription; -import org.bahmni.module.hip.web.model.PrescriptionGenerationRequest; +import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.OpenMrsPrescription; import org.openmrs.DrugOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,7 +29,7 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, Prescr } - public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { + public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { List drugOrders = openMRSDrugOrderClient.getDrugOrdersByDateFor(patientIdUuid, fromDate, toDate); return prescriptionsFor(drugOrders); } @@ -38,7 +38,7 @@ public String getEncounterUuidForOrder(DrugOrder order) { return order.getEncounter().getUuid(); } - private List prescriptionsFor(List drugOrders) { + private List prescriptionsFor(List drugOrders) { if (CollectionUtils.isEmpty(drugOrders)) { return new ArrayList<>(); } @@ -47,18 +47,18 @@ private List prescriptionsFor(List drugOrders) { .stream() .collect(Collectors.groupingBy(this::getEncounterUuidForOrder)); - List prescriptionGenerationRequests = encounterDrugOrderMap.values() + List openMrsPrescriptions = encounterDrugOrderMap.values() .stream() - .map(PrescriptionGenerationRequest::new) + .map(OpenMrsPrescription::new) .collect(Collectors.toList()); - return prescriptionGenerationRequests + return openMrsPrescriptions .stream() .map(this::generatePrescriptionFor) .collect(Collectors.toList()); } - private Prescription generatePrescriptionFor(PrescriptionGenerationRequest prescriptionGenerationRequest) { - return prescriptionGenerator.generate(prescriptionGenerationRequest); + private BundledPrescriptionResponse generatePrescriptionFor(OpenMrsPrescription openMrsPrescription) { + return prescriptionGenerator.generate(openMrsPrescription); } } From 0de026831c9bb8b30534cbd86c46b581a8f76e67 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 17:14:16 +0530 Subject: [PATCH 038/264] HIP-62 | Raghavi/Abhijeet | Adds composition creation method and bundling method in FhirPriscription --- .../hip/web/model/FhirPrescription.java | 69 +++++++++++-- .../hip/web/service/FHIRResourceMapper.java | 2 +- .../module/hip/web/service/FHIRUtils.java | 4 +- .../web/service/PrescriptionGenerator.java | 97 ++----------------- 4 files changed, 71 insertions(+), 101 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 1aa3968a..c43d80d7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -1,6 +1,5 @@ package org.bahmni.module.hip.web.model; -import lombok.AllArgsConstructor; import lombok.Getter; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; @@ -8,14 +7,14 @@ import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; -import java.util.List; -import java.util.Objects; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @Getter public class FhirPrescription { + private Date encounterTimestamp; + private Integer encounterID; private Encounter encounter; private List practitioners; private Patient patient; @@ -23,7 +22,9 @@ public class FhirPrescription { private List medications; private List medicationRequests; - private FhirPrescription(Encounter encounter, List practitioners, Patient patient, Reference patientReference, List medications, List medicationRequests) { + private FhirPrescription(Date encounterTimestamp, Integer encounterID, Encounter encounter, List practitioners, Patient patient, Reference patientReference, List medications, List medicationRequests) { + this.encounterTimestamp = encounterTimestamp; + this.encounterID = encounterID; this.encounter = encounter; this.practitioners = practitioners; this.patient = patient; @@ -33,6 +34,9 @@ private FhirPrescription(Encounter encounter, List practitioners, } public static FhirPrescription from(OpenMrsPrescription openMrsPrescription) { + + Date encounterDatetime = openMrsPrescription.getEncounter().getEncounterDatetime(); + Integer encounterId = openMrsPrescription.getEncounter().getId(); Patient patient = FHIRResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = encounterFrom(openMrsPrescription.getEncounter(), patientReference); @@ -40,12 +44,61 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription) { List medicationRequests = medicationRequestsFor(openMrsPrescription.getDrugOrders(), patientReference, practitioners.get(0)); List medications = medicationsFor(openMrsPrescription.getDrugOrders()); - return new FhirPrescription(encounter, practitioners, patient, patientReference, medications, medicationRequests); + return new FhirPrescription(encounterDatetime, encounterId, encounter, practitioners, patient, patientReference, medications, medicationRequests); + } + + public Bundle bundle(String webUrl){ + String bundleID = String.format("PR-%d", encounterID); + Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + + FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); + FHIRUtils.addToBundleEntry(bundle, encounter, false); + FHIRUtils.addToBundleEntry(bundle, practitioners, false); + FHIRUtils.addToBundleEntry(bundle, patient, false); + FHIRUtils.addToBundleEntry(bundle, medications, false); + FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); + return bundle; + } + + public Composition compositionFrom(String webURL){ + Composition composition = initializeComposition(encounterTimestamp, webURL); + Composition.SectionComponent compositionSection = composition.addSection(); + + practitioners + .forEach(practitioner -> composition + .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); + + composition + .setEncounter(FHIRUtils.getReferenceToResource(encounter)) + .setSubject(patientReference); + + compositionSection + .setTitle("OPD Prescription") + .setCode(FHIRUtils.getPrescriptionType()); + + medicationRequests + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(compositionSection::addEntry); + + return composition; + } + + private Composition initializeComposition(Date encounterTimestamp, String webURL) { + Composition composition = new Composition(); + + composition.setId(UUID.randomUUID().toString()); + composition.setDate(encounterTimestamp); + composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "document")); + composition.setStatus(Composition.CompositionStatus.FINAL); + composition.setType(FHIRUtils.getPrescriptionType()); + composition.setTitle("Prescription"); + return composition; } - private static Encounter encounterFrom(org.openmrs.Encounter openMRSEncounter, Reference patientReference){ + private static Encounter encounterFrom(org.openmrs.Encounter openMRSEncounter, Reference patientReference) { return FHIRResourceMapper - .mapToEncounter(openMRSEncounter, openMRSEncounter.getEncounterDatetime()) + .mapToEncounter(openMRSEncounter) .setSubject(patientReference); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 598d7276..8f373354 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -58,7 +58,7 @@ public class FHIRResourceMapper { put("EXAMPLE", "http://example.org/codes"); }}; - public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter, Date date) { + public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { Encounter encounter = new Encounter(); Period period = new Period(); Visit visit = emrEncounter.getVisit(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index e9a0384a..be365093 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -25,13 +25,13 @@ public class FHIRUtils { put("U", Enumerations.AdministrativeGender.UNKNOWN); }}; - public static Bundle createBundle(Date forDate, String bundleId, OrgContext hipContext) { + public static Bundle createBundle(Date forDate, String bundleId, String webURL) { Bundle bundle = new Bundle(); bundle.setId(bundleId); bundle.setTimestamp(forDate); Identifier identifier = new Identifier(); - identifier.setSystem(Utils.ensureTrailingSlash(hipContext.getWebUrl().trim()) + "/bundle"); + identifier.setSystem(Utils.ensureTrailingSlash(webURL.trim()) + "/bundle"); identifier.setValue(bundleId); bundle.setIdentifier(identifier); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java index ebecc658..528b5bdd 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -3,18 +3,13 @@ import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; import org.bahmni.module.hip.web.model.FhirPrescription; import org.bahmni.module.hip.web.model.OpenMrsPrescription; -import org.hl7.fhir.r4.model.*; -import org.openmrs.DrugOrder; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Organization; import org.openmrs.api.AdministrationService; import org.openmrs.api.context.Context; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Objects; -import java.util.UUID; -import java.util.stream.Collectors; - @Service public class PrescriptionGenerator { private final CareContextService careContextService; @@ -36,98 +31,20 @@ BundledPrescriptionResponse generate(OpenMrsPrescription openMrsPrescription) { private Bundle createPrescriptionBundle(OpenMrsPrescription openMrsPrescription) { - FhirPrescription fhirPrescription = FhirPrescription.from(openMrsPrescription); - - //Plain composition initialized - Composition composition = initializeComposition(openMrsPrescription.getEncounter()); - Composition.SectionComponent compositionSection = composition.addSection(); - - fhirPrescription.getPractitioners() - .forEach(practitioner -> composition - .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); - - composition - .setEncounter(FHIRUtils.getReferenceToResource(fhirPrescription.getEncounter())) - .setSubject(fhirPrescription.getPatientReference()); - - compositionSection - .setTitle("OPD Prescription") - .setCode(FHIRUtils.getPrescriptionType()); - - fhirPrescription.getMedicationRequests() - .stream() - .map(FHIRUtils::getReferenceToResource) - .forEach(compositionSection::addEntry); - - return wrapInBundle(openMrsPrescription, fhirPrescription, composition); - } - - private Bundle wrapInBundle(OpenMrsPrescription openMrsPrescription, FhirPrescription fhirPrescription, Composition composition) { - Bundle bundle = initializeBundle(openMrsPrescription.getEncounter()); - - FHIRUtils.addToBundleEntry(bundle, composition, false); - FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getEncounter(), false); - FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getPractitioners(), false); - FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getPatient(), false); - FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getMedications(), false); - FHIRUtils.addToBundleEntry(bundle, fhirPrescription.getMedicationRequests(), false); - return bundle; - } - - private Bundle initializeBundle(org.openmrs.Encounter emrEncounter) { - OrgContext orgContext = getOrgContext(); - return FHIRUtils.createBundle(emrEncounter.getEncounterDatetime(), prescriptionId(emrEncounter), orgContext); - } - - private List medicationRequestsFor(List drugOrders, Practitioner practitioner, Reference patientRef) { - return drugOrders - .stream() - .map(drugOrder -> FHIRResourceMapper - .mapToMedicationRequest(drugOrder, patientRef, practitioner, FHIRResourceMapper.mapToMedication(drugOrder))) - .collect(Collectors.toList()); - } - - private List fhirMedicationFor(List drugOrders) { - return drugOrders - .stream() - .map(FHIRResourceMapper::mapToMedication) - .filter(medication -> !Objects.isNull(medication)) - .collect(Collectors.toList()); - } - - private List getPractitionersFrom(org.openmrs.Encounter emrEncounter) { - return emrEncounter.getEncounterProviders() - .stream() - .map(FHIRResourceMapper::mapToPractitioner) - .collect(Collectors.toList()); - } - - private Composition initializeComposition(org.openmrs.Encounter encounterTimestamp) { - OrgContext orgContext = getOrgContext(); - - Composition composition = new Composition(); - composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp.getEncounterDatetime()); - composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), orgContext.getWebUrl(), "document")); - composition.setStatus(Composition.CompositionStatus.FINAL); - composition.setType(FHIRUtils.getPrescriptionType()); - composition.setTitle("Prescription"); - return composition; - } - - private String prescriptionId(org.openmrs.Encounter emrEncounter) { - return "PR-" + emrEncounter.getEncounterId().toString(); + return FhirPrescription + .from(openMrsPrescription) + .bundle(webURL()); } private OrgContext getOrgContext() { Organization organization = getOrganization(); return OrgContext.builder() .organization(organization) - .webUrl(getWebUrl()) + .webUrl(webURL()) .build(); } - private String getWebUrl() { + private String webURL() { AdministrationService administrationService = Context.getAdministrationService(); return administrationService.getGlobalProperty(Constants.PROP_HFR_URL); } From 3ef1513f6ce93a1b572b55a47c1bbfba8ba714c1 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 20:02:40 +0530 Subject: [PATCH 039/264] HIP-62 | Raghavi/Abhijeet | Extract outs organization context building logic --- .../OrganizationContext.java} | 11 ++-- .../service/OrganizationContextService.java | 32 ++++++++++++ .../web/service/PrescriptionGenerator.java | 51 +++++-------------- 3 files changed, 53 insertions(+), 41 deletions(-) rename omod/src/main/java/org/bahmni/module/hip/web/{service/OrgContext.java => model/OrganizationContext.java} (65%) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OrganizationContext.java similarity index 65% rename from omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java rename to omod/src/main/java/org/bahmni/module/hip/web/model/OrganizationContext.java index 83e6ee5d..d98687f5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OrgContext.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OrganizationContext.java @@ -1,4 +1,4 @@ -package org.bahmni.module.hip.web.service; +package org.bahmni.module.hip.web.model; import lombok.Builder; import lombok.Getter; @@ -6,13 +6,16 @@ import org.openmrs.VisitType; @Builder -@Getter -public class OrgContext { +public class OrganizationContext { private Organization organization; private String webUrl; - public Class getCareContextType() { + public Class careContextType() { //Hardcoded right now. Should also deal with programType, visit or visitType. return VisitType.class; } + + public String webUrl() { + return webUrl; + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java new file mode 100644 index 00000000..fe39a5a3 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java @@ -0,0 +1,32 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.web.model.OrganizationContext; +import org.hl7.fhir.r4.model.Organization; +import org.openmrs.api.AdministrationService; +import org.openmrs.api.context.Context; +import org.springframework.stereotype.Service; + +@Service +class OrganizationContextService { + + OrganizationContext buildContext() { + Organization organization = createOrganizationInstance(); + return OrganizationContext.builder() + .organization(organization) + .webUrl(webURL()) + .build(); + } + + private String webURL() { + AdministrationService administrationService = Context.getAdministrationService(); + return administrationService.getGlobalProperty(Constants.PROP_HFR_URL); + } + + private Organization createOrganizationInstance() { + AdministrationService administrationService = Context.getAdministrationService(); + String hfrId = administrationService.getGlobalProperty(Constants.PROP_HFR_ID); + String hfrName = administrationService.getGlobalProperty(Constants.PROP_HFR_NAME); + String hfrSystem = administrationService.getGlobalProperty(Constants.PROP_HFR_SYSTEM); + return FHIRUtils.createOrgInstance(hfrId, hfrName, hfrSystem); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java index 528b5bdd..457a53a9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java @@ -1,60 +1,37 @@ package org.bahmni.module.hip.web.service; -import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; -import org.bahmni.module.hip.web.model.FhirPrescription; -import org.bahmni.module.hip.web.model.OpenMrsPrescription; +import org.bahmni.module.hip.web.model.*; import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.Organization; -import org.openmrs.api.AdministrationService; -import org.openmrs.api.context.Context; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class PrescriptionGenerator { private final CareContextService careContextService; + private final OrganizationContextService organizationContextService; @Autowired - public PrescriptionGenerator(CareContextService careContextService) { + public PrescriptionGenerator(CareContextService careContextService, OrganizationContextService organizationContextService) { this.careContextService = careContextService; + this.organizationContextService = organizationContextService; } BundledPrescriptionResponse generate(OpenMrsPrescription openMrsPrescription) { - Bundle prescriptionBundle = createPrescriptionBundle(openMrsPrescription); + OrganizationContext organizationContext = organizationContextService.buildContext(); - return BundledPrescriptionResponse.builder() - .bundle(prescriptionBundle) - .careContext(careContextService.careContextFor(openMrsPrescription.getEncounter(), getOrgContext().getCareContextType())) - .build(); - } - - private Bundle createPrescriptionBundle(OpenMrsPrescription openMrsPrescription) { - - return FhirPrescription + Bundle prescriptionBundle = FhirPrescription .from(openMrsPrescription) - .bundle(webURL()); - } + .bundle(organizationContext.webUrl()); - private OrgContext getOrgContext() { - Organization organization = getOrganization(); - return OrgContext.builder() - .organization(organization) - .webUrl(webURL()) - .build(); - } - - private String webURL() { - AdministrationService administrationService = Context.getAdministrationService(); - return administrationService.getGlobalProperty(Constants.PROP_HFR_URL); - } + CareContext careContext = careContextService.careContextFor( + openMrsPrescription.getEncounter(), + organizationContext.careContextType()); - private Organization getOrganization() { - AdministrationService administrationService = Context.getAdministrationService(); - String hfrId = administrationService.getGlobalProperty(Constants.PROP_HFR_ID); - String hfrName = administrationService.getGlobalProperty(Constants.PROP_HFR_NAME); - String hfrSystem = administrationService.getGlobalProperty(Constants.PROP_HFR_SYSTEM); - return FHIRUtils.createOrgInstance(hfrId, hfrName, hfrSystem); + return BundledPrescriptionResponse.builder() + .bundle(prescriptionBundle) + .careContext(careContext) + .build(); } } From 4bcd73cd9f590bbebfd297e8b65c754f7bcf990d Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Thu, 24 Sep 2020 20:23:11 +0530 Subject: [PATCH 040/264] HIP-62 | Raghavi/Abhijeet | Refactors long method in PrescriptionService --- .../hip/web/model/FhirPrescription.java | 2 +- ...va => FhirBundledPrescriptionBuilder.java} | 6 +-- .../hip/web/service/PrescriptionService.java | 45 +++++++++---------- 3 files changed, 26 insertions(+), 27 deletions(-) rename omod/src/main/java/org/bahmni/module/hip/web/service/{PrescriptionGenerator.java => FhirBundledPrescriptionBuilder.java} (82%) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index c43d80d7..eea642c3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -60,7 +60,7 @@ public Bundle bundle(String webUrl){ return bundle; } - public Composition compositionFrom(String webURL){ + private Composition compositionFrom(String webURL){ Composition composition = initializeComposition(encounterTimestamp, webURL); Composition.SectionComponent compositionSection = composition.addSection(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java similarity index 82% rename from omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java rename to omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java index 457a53a9..4d969fcc 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionGenerator.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java @@ -6,17 +6,17 @@ import org.springframework.stereotype.Service; @Service -public class PrescriptionGenerator { +public class FhirBundledPrescriptionBuilder { private final CareContextService careContextService; private final OrganizationContextService organizationContextService; @Autowired - public PrescriptionGenerator(CareContextService careContextService, OrganizationContextService organizationContextService) { + public FhirBundledPrescriptionBuilder(CareContextService careContextService, OrganizationContextService organizationContextService) { this.careContextService = careContextService; this.organizationContextService = organizationContextService; } - BundledPrescriptionResponse generate(OpenMrsPrescription openMrsPrescription) { + BundledPrescriptionResponse buildFor(OpenMrsPrescription openMrsPrescription) { OrganizationContext organizationContext = organizationContextService.buildContext(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 1a07a613..f295d3d6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -12,7 +12,6 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.Map; import java.util.stream.Collectors; @Service @@ -20,45 +19,45 @@ public class PrescriptionService { private static final Logger log = Logger.getLogger(PrescriptionService.class); private final OpenMRSDrugOrderClient openMRSDrugOrderClient; - private final PrescriptionGenerator prescriptionGenerator; + private final FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder; @Autowired - public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, PrescriptionGenerator prescriptionGenerator) { + public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder) { this.openMRSDrugOrderClient = openMRSDrugOrderClient; - this.prescriptionGenerator = prescriptionGenerator; + this.fhirBundledPrescriptionBuilder = fhirBundledPrescriptionBuilder; } public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { - List drugOrders = openMRSDrugOrderClient.getDrugOrdersByDateFor(patientIdUuid, fromDate, toDate); - return prescriptionsFor(drugOrders); - } + List drugOrders = openMRSDrugOrderClient.getDrugOrdersByDateFor( + patientIdUuid, + fromDate, + toDate); + + if (CollectionUtils.isEmpty(drugOrders)) + return new ArrayList<>(); - public String getEncounterUuidForOrder(DrugOrder order) { - return order.getEncounter().getUuid(); + return bundlePrescriptionsFor(drugOrders); } - private List prescriptionsFor(List drugOrders) { - if (CollectionUtils.isEmpty(drugOrders)) { - return new ArrayList<>(); - } + private List bundlePrescriptionsFor(List drugOrders) { - Map> encounterDrugOrderMap = drugOrders - .stream() - .collect(Collectors.groupingBy(this::getEncounterUuidForOrder)); + List openMrsPrescriptions = buildOpenMRSPrescriptionsFor(drugOrders); - List openMrsPrescriptions = encounterDrugOrderMap.values() + return openMrsPrescriptions .stream() - .map(OpenMrsPrescription::new) + .map(fhirBundledPrescriptionBuilder::buildFor) .collect(Collectors.toList()); + } - return openMrsPrescriptions + private List buildOpenMRSPrescriptionsFor(List drugOrders) { + return drugOrders .stream() - .map(this::generatePrescriptionFor) + .collect(Collectors.groupingBy(order -> order.getEncounter().getUuid())) + .values() + .stream() + .map(OpenMrsPrescription::new) .collect(Collectors.toList()); } - private BundledPrescriptionResponse generatePrescriptionFor(OpenMrsPrescription openMrsPrescription) { - return prescriptionGenerator.generate(openMrsPrescription); - } } From 527c0af41a9b2c5c1b99d5a22f07e2730f7dbff5 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Fri, 25 Sep 2020 10:17:30 +0530 Subject: [PATCH 041/264] HIP-62 | Raghavi/Abhijeet | 1. Adds a new domain DrugOrders 2. Moves OpenMRSPrescription instance creation logic closer to OpenMRSPrescription --- .../controller/PrescriptionController.java | 6 ++- .../module/hip/web/model/DrugOrders.java | 45 +++++++++++++++++++ .../hip/web/model/FhirPrescription.java | 6 +-- .../hip/web/model/OpenMrsPrescription.java | 21 ++++++--- .../FhirBundledPrescriptionBuilder.java | 3 +- .../hip/web/service/PrescriptionService.java | 30 +++---------- 6 files changed, 75 insertions(+), 36 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 9b8945da..2bb77792 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -36,10 +36,12 @@ public PrescriptionController(HipContext hipContext, PrescriptionService prescri public @ResponseBody ResponseEntity get(@RequestParam String patientId) { try { - List bundledPrescriptionRespons = prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); + List bundledPrescriptionResponse = + prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); + return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(bundledPrescriptionRespons); + .body(bundledPrescriptionResponse); } catch (Exception e) { log.error("Error occurred while trying to call prescriptionService.getPrescriptions", e); return ResponseEntity.badRequest() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java new file mode 100644 index 00000000..50555179 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java @@ -0,0 +1,45 @@ +package org.bahmni.module.hip.web.model; + +import org.openmrs.DrugOrder; +import org.openmrs.Encounter; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class DrugOrders { + + private List openMRSDrugOrders; + + public DrugOrders(List openMRSDrugOrders) { + this.openMRSDrugOrders = openMRSDrugOrders; + } + + public Boolean isEmpty(){ + return CollectionUtils.isEmpty(openMRSDrugOrders); + } + + public Map groupByEncounter(){ + return groupByEncounterUUID() + .values() + .stream() + .map(DrugOrders::new) + .collect(Collectors.toMap(DrugOrders::firstEncounter, drugOrders -> drugOrders)); + } + + private Map> groupByEncounterUUID(){ + return openMRSDrugOrders + .stream() + .collect(Collectors.groupingBy(order -> order.getEncounter().getUuid())); + } + + private Encounter firstEncounter() { + return openMRSDrugOrders.get(0).getEncounter(); + } + + Stream stream(){ + return openMRSDrugOrders.stream(); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index eea642c3..993afa65 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -52,9 +52,9 @@ public Bundle bundle(String webUrl){ Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); - FHIRUtils.addToBundleEntry(bundle, encounter, false); FHIRUtils.addToBundleEntry(bundle, practitioners, false); FHIRUtils.addToBundleEntry(bundle, patient, false); + FHIRUtils.addToBundleEntry(bundle, encounter, false); FHIRUtils.addToBundleEntry(bundle, medications, false); FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); return bundle; @@ -103,7 +103,7 @@ private static Encounter encounterFrom(org.openmrs.Encounter openMRSEncounter, R } private static List medicationRequestsFor( - List drugOrders, + DrugOrders drugOrders, Reference patientReference, Practitioner practitioner) { return drugOrders @@ -120,7 +120,7 @@ private static List medicationRequestsFor( .collect(Collectors.toList()); } - private static List medicationsFor(List drugOrders) { + private static List medicationsFor(DrugOrders drugOrders) { return drugOrders .stream() .map(FHIRResourceMapper::mapToMedication) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java index a243d17e..23915617 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsPrescription.java @@ -2,25 +2,34 @@ import lombok.Getter; import org.hibernate.validator.constraints.NotEmpty; -import org.openmrs.DrugOrder; import org.openmrs.Encounter; import org.openmrs.EncounterProvider; import org.openmrs.Patient; import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; @Getter public class OpenMrsPrescription { private Encounter encounter; private Set encounterProviders; - private List drugOrders; + private DrugOrders drugOrders; private Patient patient; - public OpenMrsPrescription(@NotEmpty List drugOrders) { - this.encounter = drugOrders.get(0).getEncounter(); - this.encounterProviders = this.encounter.getEncounterProviders(); - this.patient = this.encounter.getPatient(); + private OpenMrsPrescription(@NotEmpty Encounter encounter, DrugOrders drugOrders) { + this.encounter = encounter; + this.encounterProviders = encounter.getEncounterProviders(); + this.patient = encounter.getPatient(); this.drugOrders = drugOrders; } + + public static List from(Map encounterDrugOrdersMap) { + return encounterDrugOrdersMap + .entrySet() + .stream() + .map(entry -> new OpenMrsPrescription(entry.getKey(), entry.getValue())) + .collect(Collectors.toList()); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java index 4d969fcc..45a15716 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java @@ -16,7 +16,7 @@ public FhirBundledPrescriptionBuilder(CareContextService careContextService, Org this.organizationContextService = organizationContextService; } - BundledPrescriptionResponse buildFor(OpenMrsPrescription openMrsPrescription) { + BundledPrescriptionResponse fhirBundleResponseFor(OpenMrsPrescription openMrsPrescription) { OrganizationContext organizationContext = organizationContextService.buildContext(); @@ -33,5 +33,4 @@ BundledPrescriptionResponse buildFor(OpenMrsPrescription openMrsPrescription) { .careContext(careContext) .build(); } - } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index f295d3d6..cc9cc3dc 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -3,11 +3,10 @@ import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.DrugOrders; import org.bahmni.module.hip.web.model.OpenMrsPrescription; -import org.openmrs.DrugOrder; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.Date; @@ -29,35 +28,20 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { - List drugOrders = openMRSDrugOrderClient.getDrugOrdersByDateFor( + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateFor( patientIdUuid, fromDate, - toDate); + toDate)); - if (CollectionUtils.isEmpty(drugOrders)) + if (drugOrders.isEmpty()) return new ArrayList<>(); - return bundlePrescriptionsFor(drugOrders); - } - - private List bundlePrescriptionsFor(List drugOrders) { - - List openMrsPrescriptions = buildOpenMRSPrescriptionsFor(drugOrders); + List openMrsPrescriptions = OpenMrsPrescription + .from(drugOrders.groupByEncounter()); return openMrsPrescriptions .stream() - .map(fhirBundledPrescriptionBuilder::buildFor) + .map(fhirBundledPrescriptionBuilder::fhirBundleResponseFor) .collect(Collectors.toList()); } - - private List buildOpenMRSPrescriptionsFor(List drugOrders) { - return drugOrders - .stream() - .collect(Collectors.groupingBy(order -> order.getEncounter().getUuid())) - .values() - .stream() - .map(OpenMrsPrescription::new) - .collect(Collectors.toList()); - } - } From 849d1be48fa240dd4eb81a75355e9a1458dd25c8 Mon Sep 17 00:00:00 2001 From: sonawaneabhijeet Date: Fri, 25 Sep 2020 10:54:43 +0530 Subject: [PATCH 042/264] HIP-62 | Raghavi/Abhijeet | Manually merges with fetch-medication branch --- omod/pom.xml | 195 +++++++++--------- .../BundledMedicationRequestController.java | 59 ++++-- .../RequestParameterMissingException.java | 15 ++ .../module/hip/web/model/ErrorResponse.java | 27 +++ ...ToMedicationRequestTranslationService.java | 23 --- .../web/service/MedicationRequestService.java | 19 +- .../web/service/OpenMRSDrugOrderClient.java | 26 ++- ...ationRequestControllerIntegrationTest.java | 146 +++++++++++++ .../BundleMedicationRequestServiceTest.java | 45 ++++ .../hip/web/service/BundleServiceTest.java | 27 +++ .../service/MedicationRequestServiceTest.java | 10 +- .../service/OpenMRSDrugOrderClientTest.java | 89 ++++++-- 12 files changed, 517 insertions(+), 164 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/exception/RequestParameterMissingException.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/ErrorResponse.java delete mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/service/BundleMedicationRequestServiceTest.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/service/BundleServiceTest.java diff --git a/omod/pom.xml b/omod/pom.xml index 1c7e8513..613944b9 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -1,114 +1,125 @@ - 4.0.0 - - org.bahmni.module - hipmodule - 0.1-SNAPSHOT - + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + 4.0.0 + + org.bahmni.module + hipmodule + 0.1-SNAPSHOT + - hipmodule-omod - jar - HIP Module OMOD - OpenMRS module project for HIP Module + hipmodule-omod + jar + HIP Module OMOD + OpenMRS module project for HIP Module - + - + org.bahmni.module hipmodule-api 0.1-SNAPSHOT - - org.openmrs.web - openmrs-web + + org.openmrs.web + openmrs-web provided - ${openMRSVersion} - + ${openMRSVersion} + org.openmrs.module webservices.rest-omod provided - - org.openmrs.module - fhir2-omod - 1.0.0-SNAPSHOT - provided - + + org.openmrs.module + fhir2-omod + 1.0.0-SNAPSHOT + provided + + + + org.projectlombok + lombok + 1.18.10 + provided + + + + javax.servlet + javax.servlet-api + 3.0.1 + provided + - - - org.projectlombok - lombok - 1.18.10 - provided - + + + + + + + org.springframework.boot + spring-boot-starter-test + 1.2.1.RELEASE + test + - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - - - ${project.artifactId}-${project.version} + + ${project.artifactId}-${project.version} - - - org.openmrs.maven.plugins - maven-openmrs-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - - - org.openmrs.maven.plugins - maven-openmrs-plugin - true - - - init - initialize - - initialize-module - - - - pack - package - - package-module - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - Expand moduleApplicationContext and messages - - unpack-dependencies - - generate-resources - - ${project.parent.groupId} - ${project.parent.artifactId}-api - true - **/* - ${project.build.directory}/classes - - - - - - + + + org.openmrs.maven.plugins + maven-openmrs-plugin + + + org.apache.maven.plugins + maven-dependency-plugin + + + org.openmrs.maven.plugins + maven-openmrs-plugin + true + + + init + initialize + + initialize-module + + + + pack + package + + package-module + + + + + + org.apache.maven.plugins + maven-dependency-plugin + + + Expand moduleApplicationContext and messages + + unpack-dependencies + + generate-resources + + ${project.parent.groupId} + ${project.parent.artifactId}-api + true + **/* + ${project.build.directory}/classes + + + + + + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java index d7307f9f..67e2d93d 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java @@ -2,6 +2,8 @@ import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.parser.IParser; +import org.bahmni.module.hip.web.exception.RequestParameterMissingException; +import org.bahmni.module.hip.web.model.ErrorResponse; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.hl7.fhir.r4.model.Bundle; import org.openmrs.module.webservices.rest.web.RestConstants; @@ -10,37 +12,58 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +@Validated +@RestController @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") -@Controller public class BundledMedicationRequestController { - private BundleMedicationRequestService bundleMedicationRequestService; + private BundleMedicationRequestService bundledMedicationRequestService; @Autowired - public BundledMedicationRequestController(BundleMedicationRequestService bundleMedicationRequestService) { - this.bundleMedicationRequestService = bundleMedicationRequestService; + public BundledMedicationRequestController(BundleMedicationRequestService bundledMedicationRequestService) { + this.bundledMedicationRequestService = bundledMedicationRequestService; } @RequestMapping(method = RequestMethod.GET, value = "/medication", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity getBundledMedicationRequestFor(@RequestParam String patientId, @RequestParam String visitType) { - try { + ResponseEntity getBundledMedicationRequestFor(@RequestParam(required = false) String patientId, + @RequestParam(required = false) String visitType) { + + if (patientId == null || patientId.equals("''")) + throw new RequestParameterMissingException("patientId"); + + if (visitType == null || visitType.equals("''")) + throw new RequestParameterMissingException("visitType"); + + Bundle bundle = bundledMedicationRequestService.bundleMedicationRequestsFor(patientId, visitType); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(serializeBundle(bundle)); + } - Bundle bundle = bundleMedicationRequestService.bundleMedicationRequestsFor(patientId, visitType); + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(RequestParameterMissingException.class) + public @ResponseBody + ErrorResponse missingRequestParameter(Exception ex) { + return new ErrorResponse(ex.getMessage()); + } - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(serializeBundle(bundle)); + @ResponseBody + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(IllegalArgumentException.class) + public String illegalArgumentException(Exception ex) { + return ex.getMessage(); + } - } catch (Exception e) { - return new ResponseEntity<>(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR); - } + @ResponseBody + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(Exception.class) + public String genericException(Exception ex) { + return "Something went wrong!!"; } private String serializeBundle(Bundle bundle) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/exception/RequestParameterMissingException.java b/omod/src/main/java/org/bahmni/module/hip/web/exception/RequestParameterMissingException.java new file mode 100644 index 00000000..ea9a0f29 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/exception/RequestParameterMissingException.java @@ -0,0 +1,15 @@ +package org.bahmni.module.hip.web.exception; + +public class RequestParameterMissingException extends RuntimeException { + + private String parameterName; + + public RequestParameterMissingException(String parameterName) { + this.parameterName = parameterName; + } + + @Override + public String getMessage() { + return parameterName + " is mandatory request parameter"; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ErrorResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ErrorResponse.java new file mode 100644 index 00000000..f5b9ac71 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ErrorResponse.java @@ -0,0 +1,27 @@ +package org.bahmni.module.hip.web.model; + +public class ErrorResponse { + private String errMessage; + + public ErrorResponse() { + } + + @Override + public String toString() { + return "ErrorResponse{" + + "errMessage='" + errMessage + '\'' + + '}'; + } + + public ErrorResponse(String errMessage) { + this.errMessage = errMessage; + } + + public String getErrMessage() { + return errMessage; + } + + public void setErrMessage(String errMessage) { + this.errMessage = errMessage; + } +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java deleted file mode 100644 index b63c371a..00000000 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DrugOrderToMedicationRequestTranslationService.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.bahmni.module.hip.web.service; - -import org.hl7.fhir.r4.model.MedicationRequest; -import org.openmrs.DrugOrder; -import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -class DrugOrderToMedicationRequestTranslationService { - - private MedicationRequestTranslator medicationRequestTranslator; - - @Autowired - public DrugOrderToMedicationRequestTranslationService(MedicationRequestTranslator medicationRequestTranslator) { - this.medicationRequestTranslator = medicationRequestTranslator; - } - - MedicationRequest toMedicationRequest(DrugOrder drugOrder) { - - return medicationRequestTranslator.toFhirResource(drugOrder); - } -} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java index 027cb05b..6168d625 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/MedicationRequestService.java @@ -2,6 +2,7 @@ import org.hl7.fhir.r4.model.MedicationRequest; import org.openmrs.DrugOrder; +import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -12,23 +13,27 @@ public class MedicationRequestService { private OpenMRSDrugOrderClient openMRSDrugOrderClient; - private DrugOrderToMedicationRequestTranslationService drugOrderToMedicationRequestTranslationService; + private MedicationRequestTranslator medicationRequestTranslator; @Autowired public MedicationRequestService(OpenMRSDrugOrderClient openMRSDrugOrderClient, - DrugOrderToMedicationRequestTranslationService drugOrderToMedicationRequestTranslationService) { + MedicationRequestTranslator medicationRequestTranslator) { this.openMRSDrugOrderClient = openMRSDrugOrderClient; - this.drugOrderToMedicationRequestTranslationService = drugOrderToMedicationRequestTranslationService; + this.medicationRequestTranslator = medicationRequestTranslator; } - List medicationRequestFor(String patientId, String byVisitType){ + List medicationRequestFor(String patientId, String byVisitType) { - List drugOrders = openMRSDrugOrderClient.getDrugOrdersFor(patientId, byVisitType); + List drugOrders = openMRSDrugOrderClient.drugOrdersFor(patientId, byVisitType); + return translateToMedicationRequest(drugOrders); + } + + private List translateToMedicationRequest(List drugOrders) { return drugOrders .stream() - .map(drugOrder -> drugOrderToMedicationRequestTranslationService.toMedicationRequest(drugOrder)) + .map(medicationRequestTranslator::toFhirResource) .collect(Collectors.toList()); } -} +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 5adafa1e..2838097c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -2,6 +2,7 @@ import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.openmrs.DrugOrder; +import org.openmrs.Order; import org.openmrs.OrderType; import org.openmrs.Patient; import org.openmrs.api.OrderService; @@ -11,28 +12,39 @@ import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Service -public class OpenMRSDrugOrderClient { +class OpenMRSDrugOrderClient { private PatientService patientService; - private DrugOrderService drugOrderService; private OrderService orderService; private PrescriptionOrderDao prescriptionOrderDao; @Autowired - public OpenMRSDrugOrderClient(PatientService patientService, DrugOrderService drugOrderService, OrderService orderService, PrescriptionOrderDao prescriptionOrderDao) { + public OpenMRSDrugOrderClient(PatientService patientService, OrderService orderService, PrescriptionOrderDao prescriptionOrderDao) { this.patientService = patientService; - this.drugOrderService = drugOrderService; this.orderService = orderService; this.prescriptionOrderDao = prescriptionOrderDao; } - List getDrugOrdersFor(String forPatientUUID, String byTheirVisitType) { + List drugOrdersFor(String patientUUID, String visitType) { - Patient patient = patientService.getPatientByUuid(forPatientUUID); + Patient patient = patientService.getPatientByUuid(patientUUID); + + return orderService.getAllOrdersByPatient(patient).stream() + .filter(order -> matchesVisitType(visitType, order)) + .filter(this::isDrugOrder) + .map(order -> (DrugOrder) order) + .collect(Collectors.toList()); + } + + private boolean isDrugOrder(Order order) { + return order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID); + } - return drugOrderService.getAllDrugOrderFor(patient, byTheirVisitType); + private boolean matchesVisitType(String visitType, Order order) { + return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } List getDrugOrdersByDateFor(String forPatientUUID, Date fromDate, Date toDate) { diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java new file mode 100644 index 00000000..26eb71b9 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java @@ -0,0 +1,146 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.service.BundleMedicationRequestService; +import org.bahmni.module.hip.web.service.BundleMedicationRequestServiceTest; +import org.hl7.fhir.r4.model.Bundle; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.util.NestedServletException; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {BundledMedicationRequestController.class, TestConfiguration.class}) +@WebAppConfiguration +public class BundledMedicationRequestControllerIntegrationTest { + + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private BundleMedicationRequestService bundledMedicationRequestService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200OkOnSuccess() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/medication?patientId='0f90531a-285c-438b-b265-bb3abb4745bd'" + + "&visitType='OPD'") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnHttpBadRequestWhenPatientIdIsMissing() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/medication") + .contentType(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnHttpBadRequestWhenPatientIdIsEmpty() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/medication?patient=''") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnHttpBadRequestWhenVisitTypeIsMissing() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/medication?patient=''") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnHttpBadRequestWhenVisitTypeIsEmpty() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + + "/hip/medication?patient='0f90531a-285c-438b-b265-bb3abb4745bd'&visitType=''") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnPatientIdRequestParameterIsMandatoryErrorMessage() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + MvcResult mvcResult = mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + + "/hip/medication?patient=''") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + + assertEquals("{\"errMessage\":\"patientId is mandatory request parameter\"}", content); + } + + @Test(expected = NestedServletException.class) + public void shouldReturnVisitTypeRequestParameterIsMandatoryErrorMessage() throws Exception { + + when(bundledMedicationRequestService.bundleMedicationRequestsFor(anyString(), anyString())) + .thenReturn(new Bundle()); + + MvcResult mvcResult = mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + + "/hip/medication?patientId='0f90531a-285c-438b-b265-bb3abb4745bd'") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + + assertEquals("{\"errMessage\":\"visitType is mandatory request parameter\"}", content); + } +} + +@Configuration +class TestConfiguration { + @Bean + public BundleMedicationRequestService bundleMedicationRequestService() { + return mock(BundleMedicationRequestService.class); + } +} \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/BundleMedicationRequestServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/BundleMedicationRequestServiceTest.java new file mode 100644 index 00000000..2a4d8f85 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/BundleMedicationRequestServiceTest.java @@ -0,0 +1,45 @@ +package org.bahmni.module.hip.web.service; + + +import org.hl7.fhir.r4.model.MedicationRequest; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.*; + +public class BundleMedicationRequestServiceTest { + + private MedicationRequestService medicationRequestService = mock(MedicationRequestService.class); + private BundleService bundleService = mock(BundleService.class); + + private BundleMedicationRequestService bundledMedicationRequestService = + new BundleMedicationRequestService(medicationRequestService, bundleService); + + @Test + public void shouldFetchMedicationRequestForPatientBasedOnTheVisitType() { + + bundledMedicationRequestService + .bundleMedicationRequestsFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); + + verify(medicationRequestService) + .medicationRequestFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); + } + + @Test + public void shouldBundleAllMedicationRequests() { + + List medicationRequests = new ArrayList<>(); + medicationRequests.add(new MedicationRequest()); + + when(medicationRequestService.medicationRequestFor(anyString(), anyString())) + .thenReturn(medicationRequests); + + bundledMedicationRequestService + .bundleMedicationRequestsFor("", ""); + + verify(bundleService).bundleMedicationRequests(medicationRequests); + } +} + diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/BundleServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/BundleServiceTest.java new file mode 100644 index 00000000..2d3c4bf7 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/BundleServiceTest.java @@ -0,0 +1,27 @@ +package org.bahmni.module.hip.web.service; + + +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.ResourceType; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class BundleServiceTest { + + private BundleService bundleService = new BundleService(); + + @Test + public void shouldWrapTheMedicationRequestsInAFhirBundle() { + List medicationRequests = new ArrayList<>(); + medicationRequests.add(new MedicationRequest()); + + Bundle bundle = bundleService.bundleMedicationRequests(medicationRequests); + + assertEquals(ResourceType.MedicationRequest, bundle.getEntry().get(0).getResource().getResourceType()); + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationRequestServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationRequestServiceTest.java index 31269a06..5c59db49 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationRequestServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/MedicationRequestServiceTest.java @@ -1,8 +1,8 @@ - package org.bahmni.module.hip.web.service; import org.junit.Test; +import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import static org.mockito.Mockito.*; @@ -10,12 +10,12 @@ public class MedicationRequestServiceTest { private OpenMRSDrugOrderClient openMRSDrugOrderClient = mock(OpenMRSDrugOrderClient.class); - private DrugOrderToMedicationRequestTranslationService drugOrderToMedicationRequestTranslationService = - mock(DrugOrderToMedicationRequestTranslationService.class); + private MedicationRequestTranslator medicationTranslator = + mock(MedicationRequestTranslator.class); private MedicationRequestService medicationRequestService = new MedicationRequestService( openMRSDrugOrderClient, - drugOrderToMedicationRequestTranslationService + medicationTranslator ); @Test @@ -24,6 +24,6 @@ public void shouldFetchAllDrugOrdersForVisitTypeOPDGivenAPatientID() { medicationRequestService.medicationRequestFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); verify(openMRSDrugOrderClient, times(1)) - .getDrugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); + .drugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index 3d7bb218..2db4191c 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -1,41 +1,106 @@ package org.bahmni.module.hip.web.service; + import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.junit.Test; -import org.openmrs.Patient; +import org.openmrs.*; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.*; public class OpenMRSDrugOrderClientTest { private PatientService patientService = mock(PatientService.class); - private DrugOrderService drugOrderService = mock(DrugOrderService.class); private OrderService orderService = mock(OrderService.class); private PrescriptionOrderDao prescriptionOrderDao = mock(PrescriptionOrderDao.class); - private OpenMRSDrugOrderClient openMRSDrugOrderClient = new OpenMRSDrugOrderClient(patientService, drugOrderService, orderService, prescriptionOrderDao); + private OpenMRSDrugOrderClient openMRSDrugOrderClient = + new OpenMRSDrugOrderClient(patientService, orderService, prescriptionOrderDao); + + @Test + public void shouldFetchPatientByItsUUID() { + + openMRSDrugOrderClient.drugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", ""); + + verify(patientService).getPatientByUuid("0f90531a-285c-438b-b265-bb3abb4745bd"); + } + + @Test + public void shouldFetchAllOrdersForPatient() { + + Patient patient = mock(Patient.class); + + when(patientService.getPatientByUuid(anyString())) + .thenReturn(patient); + + openMRSDrugOrderClient.drugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", ""); + + verify(orderService, times(1)) + .getAllOrdersByPatient(patient); + } @Test - public void shouldFetchThePatientFromTheOpenMRSGivenItsUUID() { + public void shouldFilterOutOrdersThatDoNotMatchTheVisitType() { + + Patient patient = mock(Patient.class); + + Order order = mock(Order.class); + Encounter encounter = mock(Encounter.class); + Visit visit = mock(Visit.class); + VisitType visitType = mock(VisitType.class); + + when(patientService.getPatientByUuid(anyString())) + .thenReturn(patient); + when(order.getEncounter()).thenReturn(encounter); + when(encounter.getVisit()).thenReturn(visit); + when(visit.getVisitType()).thenReturn(visitType); + when(visitType.getName()).thenReturn("IPD"); + + List orders = new ArrayList<>(); - openMRSDrugOrderClient.getDrugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", ""); + orders.add(order); - verify(patientService, times(1)) - .getPatientByUuid("0f90531a-285c-438b-b265-bb3abb4745bd"); + when(orderService.getAllOrdersByPatient(patient)).thenReturn(orders); + + List drugOrders = openMRSDrugOrderClient.drugOrdersFor("", "OPD"); + + assertEquals(0, drugOrders.size()); } @Test - public void shouldFetchAllDrugOrderOfAPatientGivenTheirPurposeOfVisit() { + public void shouldFilterInOnlyDrugOrdersThatMatchTheType() { Patient patient = mock(Patient.class); - when(patientService.getPatientByUuid(anyString())).thenReturn(patient); + OrderType orderType = new OrderType(345); + orderType.setUuid(OrderType.DRUG_ORDER_TYPE_UUID); + + DrugOrder order = mock(DrugOrder.class); + Encounter encounter = mock(Encounter.class); + Visit visit = mock(Visit.class); + VisitType visitType = mock(VisitType.class); + + when(patientService.getPatientByUuid(anyString())) + .thenReturn(patient); + when(order.getEncounter()).thenReturn(encounter); + when(order.getOrderType()).thenReturn(orderType); + when(encounter.getVisit()).thenReturn(visit); + when(visit.getVisitType()).thenReturn(visitType); + when(visitType.getName()).thenReturn("OPD"); + + List orders = new ArrayList<>(); + orders.add(order); + + when(orderService.getAllOrdersByPatient(patient)).thenReturn(orders); - openMRSDrugOrderClient.getDrugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); + List drugOrders = openMRSDrugOrderClient + .drugOrdersFor("0f90531a-285c-438b-b265-bb3abb4745bd", "OPD"); - verify(drugOrderService, times(1)) - .getAllDrugOrderFor(patient, "OPD"); + assertEquals(1, drugOrders.size()); } } From a46a4b59a79e69d979a071ca6f4cbc96a2cec405 Mon Sep 17 00:00:00 2001 From: raghavi Date: Fri, 25 Sep 2020 11:22:04 +0530 Subject: [PATCH 043/264] HIP-62 | Raghavi/ Abhijeet | Adds a unit test for fetching drugorders by date range --- .../controller/PrescriptionController.java | 3 ++- .../module/hip/web/model/DateRange.java | 13 ++++++++++++ .../web/service/OpenMRSDrugOrderClient.java | 6 +++--- .../hip/web/service/PrescriptionService.java | 9 +++------ .../service/OpenMRSDrugOrderClientTest.java | 20 +++++++++++++++++++ 5 files changed, 41 insertions(+), 10 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/DateRange.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 2bb77792..0669dde3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -2,6 +2,7 @@ import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.service.PrescriptionService; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; @@ -37,7 +38,7 @@ public PrescriptionController(HipContext hipContext, PrescriptionService prescri ResponseEntity get(@RequestParam String patientId) { try { List bundledPrescriptionResponse = - prescriptionService.getPrescriptions(patientId, getFromDate(), new Date()); + prescriptionService.getPrescriptions(patientId, new DateRange(getFromDate(), new Date())); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/DateRange.java b/omod/src/main/java/org/bahmni/module/hip/web/model/DateRange.java new file mode 100644 index 00000000..8f89c134 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/DateRange.java @@ -0,0 +1,13 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +import java.util.Date; + +@AllArgsConstructor +@Getter +public class DateRange { + Date from; + Date to; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 2838097c..a45e5282 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; +import org.bahmni.module.hip.web.model.DateRange; import org.openmrs.DrugOrder; import org.openmrs.Order; import org.openmrs.OrderType; @@ -10,7 +11,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -47,9 +47,9 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateFor(String forPatientUUID, Date fromDate, Date toDate) { + List getDrugOrdersByDateFor(String forPatientUUID, DateRange dateRange) { Patient patient = patientService.getPatientByUuid(forPatientUUID); OrderType drugOrderType = orderService.getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); - return prescriptionOrderDao.getDrugOrders(patient, fromDate, toDate, drugOrderType); + return prescriptionOrderDao.getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index cc9cc3dc..95f6e6a8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -3,13 +3,13 @@ import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.model.DrugOrders; import org.bahmni.module.hip.web.model.OpenMrsPrescription; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -27,11 +27,8 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, Date fromDate, Date toDate) { - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateFor( - patientIdUuid, - fromDate, - toDate)); + public List getPrescriptions(String patientIdUuid, DateRange dateRange) { + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateFor(patientIdUuid, dateRange)); if (drugOrders.isEmpty()) return new ArrayList<>(); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index 2db4191c..050f9f51 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -2,12 +2,14 @@ import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; +import org.bahmni.module.hip.web.model.DateRange; import org.junit.Test; import org.openmrs.*; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; import java.util.ArrayList; +import java.util.Date; import java.util.List; import static org.junit.Assert.assertEquals; @@ -103,4 +105,22 @@ public void shouldFilterInOnlyDrugOrdersThatMatchTheType() { assertEquals(1, drugOrders.size()); } + + @Test + public void shouldFetchDrugOrdersForADateRangeAndAPatient() { + DateRange dateRange = new DateRange(new Date(), new Date()); + String patientUUID = "0f90531a-285c-438b-b265-bb3abb4745bd"; + + Patient patient = mock(Patient.class); + OrderType orderType = mock(OrderType.class); + + when(patientService.getPatientByUuid(anyString())) + .thenReturn(patient); + when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); + + openMRSDrugOrderClient.getDrugOrdersByDateFor(patientUUID, dateRange); + + verify(prescriptionOrderDao, times(1)) + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType); + } } From e36f9da63a135cb86b2d08897b066cb087fd84f5 Mon Sep 17 00:00:00 2001 From: raghavi Date: Fri, 25 Sep 2020 12:20:34 +0530 Subject: [PATCH 044/264] HIP-62 | Raghavi/ Abhijeet | Adds a test for DrugOrders group by Encounter --- .../hip/web/builders/DrugOrderBuilder.java | 25 ++++++++++ .../module/hip/web/model/DrugOrdersTest.java | 47 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java diff --git a/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java b/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java new file mode 100644 index 00000000..7ced6274 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java @@ -0,0 +1,25 @@ +package org.bahmni.module.hip.web.builders; + +import org.openmrs.DrugOrder; +import org.openmrs.Encounter; + +public class DrugOrderBuilder { + private Encounter encounter; + + public DrugOrderBuilder withEncounterUUID(String encounterUUID) { + Encounter encounter = new Encounter(); + encounter.setUuid(encounterUUID); + this.encounter = encounter; + return this; + } + + public static DrugOrderBuilder getBuilder() { + return new DrugOrderBuilder(); + } + + public DrugOrder build() { + DrugOrder drugOrder = new DrugOrder(); + drugOrder.setEncounter(this.encounter); + return drugOrder; + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java b/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java new file mode 100644 index 00000000..fe0bf3a4 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java @@ -0,0 +1,47 @@ +package org.bahmni.module.hip.web.model; + +import org.bahmni.module.hip.web.builders.DrugOrderBuilder; +import org.junit.Assert; +import org.junit.Test; +import org.openmrs.DrugOrder; +import org.openmrs.Encounter; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +public class DrugOrdersTest { + @Test + public void shouldGroupDrugOrdersByTheirEncounterUUIDs() { + String UUIDOne = "0a90531a-285c-438b-b265-bb3abb4745bd"; + String UUIDTwo = "0b90531a-285c-238b-b485-bb3abb4745bd"; + DrugOrder drugOrderOne = DrugOrderBuilder.getBuilder() + .withEncounterUUID(UUIDOne) + .build(); + DrugOrder drugOrderTwo = DrugOrderBuilder.getBuilder() + .withEncounterUUID(UUIDTwo) + .build(); + + List openMrsDrugOrders = new ArrayList() {{ + add(drugOrderOne); + add(drugOrderTwo); + }}; + + DrugOrders drugOrders = new DrugOrders(openMrsDrugOrders); + + Map encounterDrugOrdersMap = drugOrders.groupByEncounter(); + + List actualEncounterUUIDs = encounterDrugOrdersMap + .keySet().stream() + .map(Encounter::getUuid) + .collect(Collectors.toList()); + + ArrayList expectedEncounterUUIDs = new ArrayList() {{ + add(UUIDOne); + add(UUIDTwo); + }}; + + Assert.assertEquals(expectedEncounterUUIDs, actualEncounterUUIDs); + } +} \ No newline at end of file From e9488569413abfaa12ab871e46346b0b28fcfb49 Mon Sep 17 00:00:00 2001 From: raghavi Date: Fri, 25 Sep 2020 16:18:05 +0530 Subject: [PATCH 045/264] HIP-62 | Raghavi/ Abhijeet | Fixes the stringification of bundle in prescription bundle response --- .../BundledMedicationRequestController.java | 8 +------- .../module/hip/web/controller/HipContext.java | 15 --------------- .../web/model/BundledPrescriptionResponse.java | 1 + .../web/model/serializers/BundleSerializer.java | 13 +++++++++++++ .../{ => serializers}/FhirBundleSerializer.java | 10 +++++----- ...edicationRequestControllerIntegrationTest.java | 1 - 6 files changed, 20 insertions(+), 28 deletions(-) delete mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/serializers/BundleSerializer.java rename omod/src/main/java/org/bahmni/module/hip/web/model/{ => serializers}/FhirBundleSerializer.java (59%) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java index 67e2d93d..3bbfd01b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.controller; -import ca.uhn.fhir.context.FhirContext; -import ca.uhn.fhir.parser.IParser; import org.bahmni.module.hip.web.exception.RequestParameterMissingException; import org.bahmni.module.hip.web.model.ErrorResponse; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; @@ -15,6 +13,7 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import static org.bahmni.module.hip.web.model.serializers.BundleSerializer.serializeBundle; @Validated @RestController @@ -66,9 +65,4 @@ public String genericException(Exception ex) { return "Something went wrong!!"; } - private String serializeBundle(Bundle bundle) { - FhirContext ctx = FhirContext.forR4(); - IParser parser = ctx.newJsonParser(); - return parser.encodeResourceToString(bundle); - } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java deleted file mode 100644 index 711a4a42..00000000 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipContext.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bahmni.module.hip.web.controller; - -import ca.uhn.fhir.context.FhirContext; -import org.hl7.fhir.r4.model.Bundle; -import org.springframework.stereotype.Component; - - -@Component -public class HipContext { - private static final FhirContext fhirCtx = FhirContext.forR4(); - - public static String encodeToString(Bundle bundle) { - return fhirCtx.newJsonParser().encodeResourceToString(bundle); - } -} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java index dffe81a8..8b7e4f50 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java @@ -3,6 +3,7 @@ import lombok.Builder; import lombok.Getter; import lombok.Setter; +import org.bahmni.module.hip.web.model.serializers.FhirBundleSerializer; import org.codehaus.jackson.map.annotate.JsonSerialize; import org.hl7.fhir.r4.model.Bundle; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/BundleSerializer.java b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/BundleSerializer.java new file mode 100644 index 00000000..b5e005bc --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/BundleSerializer.java @@ -0,0 +1,13 @@ +package org.bahmni.module.hip.web.model.serializers; + +import ca.uhn.fhir.context.FhirContext; +import ca.uhn.fhir.parser.IParser; +import org.hl7.fhir.r4.model.Bundle; + +public class BundleSerializer { + public static String serializeBundle(Bundle bundle) { + FhirContext ctx = FhirContext.forR4(); + IParser parser = ctx.newJsonParser(); + return parser.encodeResourceToString(bundle); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java similarity index 59% rename from omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java rename to omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java index 190dd780..4a3cfe8d 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirBundleSerializer.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java @@ -1,18 +1,18 @@ -package org.bahmni.module.hip.web.model; +package org.bahmni.module.hip.web.model.serializers; -import org.bahmni.module.hip.web.controller.HipContext; import org.codehaus.jackson.JsonGenerator; -import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.JsonSerializer; import org.codehaus.jackson.map.SerializerProvider; import org.hl7.fhir.r4.model.Bundle; import java.io.IOException; +import static org.bahmni.module.hip.web.model.serializers.BundleSerializer.serializeBundle; + public class FhirBundleSerializer extends JsonSerializer { @Override public void serialize(Bundle bundle, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) - throws IOException, JsonProcessingException { - jsonGenerator.writeString(HipContext.encodeToString(bundle)); + throws IOException { + jsonGenerator.writeRaw(serializeBundle(bundle)); } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java index 26eb71b9..9b8c4704 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java @@ -1,7 +1,6 @@ package org.bahmni.module.hip.web.controller; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; -import org.bahmni.module.hip.web.service.BundleMedicationRequestServiceTest; import org.hl7.fhir.r4.model.Bundle; import org.junit.Before; import org.junit.Test; From 283a3766c97f4340b0863ed4b748011124b2f79b Mon Sep 17 00:00:00 2001 From: raghavi Date: Fri, 25 Sep 2020 16:21:02 +0530 Subject: [PATCH 046/264] HIP-62 | Raghavi/ Abhijeet | Adds DrugOrders test for verifying drug orders grouped by encounters --- .../controller/PrescriptionController.java | 4 +- .../module/hip/web/model/DrugOrders.java | 7 +- .../hip/web/builders/DrugOrderBuilder.java | 15 ++-- .../hip/web/builders/EncounterBuilder.java | 21 ++++++ .../module/hip/web/model/DrugOrdersTest.java | 69 ++++++++++++++++--- 5 files changed, 97 insertions(+), 19 deletions(-) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/builders/EncounterBuilder.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 0669dde3..950979e2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -23,13 +23,11 @@ @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @Controller public class PrescriptionController { - private HipContext hipContext; private PrescriptionService prescriptionService; private static final Logger log = Logger.getLogger(PrescriptionController.class); @Autowired - public PrescriptionController(HipContext hipContext, PrescriptionService prescriptionService) { - this.hipContext = hipContext; + public PrescriptionController(PrescriptionService prescriptionService) { this.prescriptionService = prescriptionService; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java index 50555179..f5dfabbf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java @@ -4,6 +4,7 @@ import org.openmrs.Encounter; import org.springframework.util.CollectionUtils; +import javax.validation.constraints.NotNull; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -13,7 +14,7 @@ public class DrugOrders { private List openMRSDrugOrders; - public DrugOrders(List openMRSDrugOrders) { + public DrugOrders(@NotNull List openMRSDrugOrders) { this.openMRSDrugOrders = openMRSDrugOrders; } @@ -29,6 +30,10 @@ public Map groupByEncounter(){ .collect(Collectors.toMap(DrugOrders::firstEncounter, drugOrders -> drugOrders)); } + public int size() { + return openMRSDrugOrders.size(); + } + private Map> groupByEncounterUUID(){ return openMRSDrugOrders .stream() diff --git a/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java b/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java index 7ced6274..35e72a58 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/builders/DrugOrderBuilder.java @@ -4,22 +4,27 @@ import org.openmrs.Encounter; public class DrugOrderBuilder { + private String drugOrderUUID; private Encounter encounter; - public DrugOrderBuilder withEncounterUUID(String encounterUUID) { - Encounter encounter = new Encounter(); - encounter.setUuid(encounterUUID); + public DrugOrderBuilder(String drugOrderUUID) { + this.drugOrderUUID = drugOrderUUID; + } + + public DrugOrderBuilder withEncounter(Encounter encounter) { this.encounter = encounter; return this; } - public static DrugOrderBuilder getBuilder() { - return new DrugOrderBuilder(); + public static DrugOrderBuilder getBuilder(String drugOrderUUID) { + return new DrugOrderBuilder(drugOrderUUID); } public DrugOrder build() { DrugOrder drugOrder = new DrugOrder(); + drugOrder.setUuid(drugOrderUUID); drugOrder.setEncounter(this.encounter); + return drugOrder; } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/builders/EncounterBuilder.java b/omod/src/test/java/org/bahmni/module/hip/web/builders/EncounterBuilder.java new file mode 100644 index 00000000..39d1aa84 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/builders/EncounterBuilder.java @@ -0,0 +1,21 @@ +package org.bahmni.module.hip.web.builders; + +import lombok.AllArgsConstructor; +import org.openmrs.Encounter; + +@AllArgsConstructor +public class EncounterBuilder { + private String encounterUUID; + + public static EncounterBuilder getBuilder(String encounterUUID) { + return new EncounterBuilder(encounterUUID); + } + + public Encounter build() { + Encounter encounter = new Encounter(); + encounter.setUuid(encounterUUID); + + return encounter; + } + +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java b/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java index fe0bf3a4..8e4ca3ed 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/model/DrugOrdersTest.java @@ -1,7 +1,7 @@ package org.bahmni.module.hip.web.model; import org.bahmni.module.hip.web.builders.DrugOrderBuilder; -import org.junit.Assert; +import org.bahmni.module.hip.web.builders.EncounterBuilder; import org.junit.Test; import org.openmrs.DrugOrder; import org.openmrs.Encounter; @@ -11,16 +11,25 @@ import java.util.Map; import java.util.stream.Collectors; +import static java.util.Arrays.asList; +import static java.util.Collections.singletonList; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + public class DrugOrdersTest { @Test public void shouldGroupDrugOrdersByTheirEncounterUUIDs() { - String UUIDOne = "0a90531a-285c-438b-b265-bb3abb4745bd"; - String UUIDTwo = "0b90531a-285c-238b-b485-bb3abb4745bd"; - DrugOrder drugOrderOne = DrugOrderBuilder.getBuilder() - .withEncounterUUID(UUIDOne) + String encounterUUIDOne = "0a90531a-285c-438b-b265-bb3abb4745bd"; + String encounterUUIDTwo = "0b90531a-285c-238b-b485-bb3abb4745bd"; + + Encounter encounterOne = EncounterBuilder.getBuilder(encounterUUIDOne).build(); + Encounter encounterTwo = EncounterBuilder.getBuilder(encounterUUIDTwo).build(); + + DrugOrder drugOrderOne = DrugOrderBuilder.getBuilder("d118451a-a046-4bbe-9819-f7722d7a5c1c") + .withEncounter(encounterOne) .build(); - DrugOrder drugOrderTwo = DrugOrderBuilder.getBuilder() - .withEncounterUUID(UUIDTwo) + DrugOrder drugOrderTwo = DrugOrderBuilder.getBuilder("8a8ff846-98b3-48c6-88e7-5b734654a56a") + .withEncounter(encounterTwo) .build(); List openMrsDrugOrders = new ArrayList() {{ @@ -38,10 +47,50 @@ public void shouldGroupDrugOrdersByTheirEncounterUUIDs() { .collect(Collectors.toList()); ArrayList expectedEncounterUUIDs = new ArrayList() {{ - add(UUIDOne); - add(UUIDTwo); + add(encounterUUIDOne); + add(encounterUUIDTwo); + }}; + + assertThat(actualEncounterUUIDs, is(expectedEncounterUUIDs)); + } + + @Test + public void shouldGroupDrugOrdersByEncounterUUIDForEncountersHavingMultipleDrugOrders() { + String encounterUUIDOne = "0a90531a-285c-438b-b265-bb3abb4745bd"; + String encounterUUIDTwo = "0b90531a-285c-238b-b485-bb3abb4745bd"; + + Encounter encounterOne = EncounterBuilder.getBuilder(encounterUUIDOne).build(); + Encounter encounterTwo = EncounterBuilder.getBuilder(encounterUUIDTwo).build(); + + String drugOrderOneUUID = "d118451a-a046-4bbe-9819-f7722d7a5c1c"; + String drugOrderTwoUUID = "8a8ff846-98b3-48c6-88e7-5b734654a56a"; + String drugOrderThreeUUID = "5c66b4c8-7086-47f6-a0ac-44c7b423695d"; + + DrugOrder drugOrderOne = DrugOrderBuilder.getBuilder(drugOrderOneUUID) + .withEncounter(encounterOne) + .build(); + DrugOrder drugOrderTwo = DrugOrderBuilder.getBuilder(drugOrderTwoUUID) + .withEncounter(encounterTwo) + .build(); + DrugOrder drugOrderThree = DrugOrderBuilder.getBuilder(drugOrderThreeUUID) + .withEncounter(encounterTwo) + .build(); + + List openMrsDrugOrders = new ArrayList() {{ + add(drugOrderOne); + add(drugOrderTwo); + add(drugOrderThree); }}; - Assert.assertEquals(expectedEncounterUUIDs, actualEncounterUUIDs); + DrugOrders drugOrders = new DrugOrders(openMrsDrugOrders); + + Map encounterDrugOrdersMap = drugOrders.groupByEncounter(); + + List actualEncounterOneDrugOrderUUIDs = encounterDrugOrdersMap.get(encounterOne).stream().map(DrugOrder::getUuid).collect(Collectors.toList()); + List actualEncounterTwoDrugOrderUUIDs = encounterDrugOrdersMap.get(encounterTwo).stream().map(DrugOrder::getUuid).collect(Collectors.toList()); + + assertThat(actualEncounterOneDrugOrderUUIDs, is(singletonList(drugOrderOneUUID))); + assertThat(actualEncounterTwoDrugOrderUUIDs, is(asList(drugOrderTwoUUID, drugOrderThreeUUID))); + } } \ No newline at end of file From ff5e666734391759f340f076437b82da2708c86a Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 11:36:34 +0530 Subject: [PATCH 047/264] HIP-62 | Raghavi | Remove unused imports and unused code --- .../hip/web/model/BundledPrescriptionResponse.java | 9 ++------- .../bahmni/module/hip/web/model/FhirPrescription.java | 1 - 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java index 8b7e4f50..c9574a29 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java @@ -12,13 +12,8 @@ @Setter public class BundledPrescriptionResponse { private CareContext careContext; - private Bundle bundle; - public CareContext getCareContext() { - return careContext; - } @JsonSerialize(using = FhirBundleSerializer.class) - public Bundle getBundle() { - return bundle; - } + private Bundle bundle; + } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 993afa65..8e542293 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -4,7 +4,6 @@ import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.*; -import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; import java.util.*; From 65464764de1ea2bcba05e00a24868bae375f2882 Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 12:00:01 +0530 Subject: [PATCH 048/264] HIP-62 | Raghavi | use openmrs fhir module to translate patient --- .../hip/web/model/FhirPrescription.java | 12 ++--- .../hip/web/service/FHIRResourceMapper.java | 52 ++++++------------- .../FhirBundledPrescriptionBuilder.java | 6 ++- 3 files changed, 24 insertions(+), 46 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 8e542293..071d2855 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -32,13 +32,13 @@ private FhirPrescription(Date encounterTimestamp, Integer encounterID, Encounter this.medicationRequests = medicationRequests; } - public static FhirPrescription from(OpenMrsPrescription openMrsPrescription) { + public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHIRResourceMapper fhirResourceMapper) { Date encounterDatetime = openMrsPrescription.getEncounter().getEncounterDatetime(); Integer encounterId = openMrsPrescription.getEncounter().getId(); - Patient patient = FHIRResourceMapper.mapToPatient(openMrsPrescription.getPatient()); + Patient patient = fhirResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); - Encounter encounter = encounterFrom(openMrsPrescription.getEncounter(), patientReference); + Encounter encounter = FHIRResourceMapper.mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); List practitioners = getPractitionersFrom(openMrsPrescription.getEncounterProviders()); List medicationRequests = medicationRequestsFor(openMrsPrescription.getDrugOrders(), patientReference, practitioners.get(0)); List medications = medicationsFor(openMrsPrescription.getDrugOrders()); @@ -95,12 +95,6 @@ private Composition initializeComposition(Date encounterTimestamp, String webURL return composition; } - private static Encounter encounterFrom(org.openmrs.Encounter openMRSEncounter, Reference patientReference) { - return FHIRResourceMapper - .mapToEncounter(openMRSEncounter) - .setSubject(patientReference); - } - private static List medicationRequestsFor( DrugOrders drugOrders, Reference patientReference, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 8f373354..62eaefda 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -3,39 +3,23 @@ import org.codehaus.jackson.JsonNode; import org.codehaus.jackson.map.ObjectMapper; import org.hl7.fhir.instance.model.api.IBaseResource; -import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Coding; import org.hl7.fhir.r4.model.Encounter; -import org.hl7.fhir.r4.model.HumanName; -import org.hl7.fhir.r4.model.Medication; -import org.hl7.fhir.r4.model.MedicationRequest; import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.Period; -import org.hl7.fhir.r4.model.Practitioner; -import org.hl7.fhir.r4.model.Reference; -import org.hl7.fhir.r4.model.StringType; -import org.openmrs.ConceptReferenceTerm; -import org.openmrs.ConceptSource; -import org.openmrs.Drug; -import org.openmrs.DrugOrder; -import org.openmrs.DrugReferenceMap; -import org.openmrs.EncounterProvider; -import org.openmrs.PatientIdentifier; -import org.openmrs.PersonName; -import org.openmrs.Provider; -import org.openmrs.ProviderAttribute; -import org.openmrs.Visit; +import org.hl7.fhir.r4.model.*; +import org.openmrs.*; +import org.openmrs.module.fhir2.api.translators.PatientTranslator; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.Collections; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; +@Service public class FHIRResourceMapper { + + private final PatientTranslator patientTranslator; + private static Map encounterTypeMap = new HashMap() {{ put("ADMISSION", "IMP,inpatient encounter"); put("CONSULTATION", "AMB,ambulatory"); @@ -58,6 +42,11 @@ public class FHIRResourceMapper { put("EXAMPLE", "http://example.org/codes"); }}; + @Autowired + public FHIRResourceMapper(PatientTranslator patientTranslator) { + this.patientTranslator = patientTranslator; + } + public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { Encounter encounter = new Encounter(); Period period = new Period(); @@ -105,15 +94,8 @@ private static String getEncounterClass(String visitType) { return encClassDetails; } - public static Patient mapToPatient(org.openmrs.Patient emrPatient) { - Patient patient = new Patient(); - patient.setId(emrPatient.getUuid()); - patient.setGender(FHIRUtils.getGender(emrPatient.getGender())); - HumanName humanName = mapToHumanName(emrPatient.getPersonName()); - patient.addName(humanName); - patient.setIdentifier(FHIRUtils.getEmrPatientIdentifiers(emrPatient)); - List patientIdentifiers = emrPatient.getActiveIdentifiers(); - return patient; + public Patient mapToPatient(org.openmrs.Patient emrPatient) { + return patientTranslator.toFhirResource(emrPatient); } private static HumanName mapToHumanName(PersonName personName) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java index 45a15716..0b49720c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java @@ -9,11 +9,13 @@ public class FhirBundledPrescriptionBuilder { private final CareContextService careContextService; private final OrganizationContextService organizationContextService; + private final FHIRResourceMapper fhirResourceMapper; @Autowired - public FhirBundledPrescriptionBuilder(CareContextService careContextService, OrganizationContextService organizationContextService) { + public FhirBundledPrescriptionBuilder(CareContextService careContextService, OrganizationContextService organizationContextService, FHIRResourceMapper fhirResourceMapper) { this.careContextService = careContextService; this.organizationContextService = organizationContextService; + this.fhirResourceMapper = fhirResourceMapper; } BundledPrescriptionResponse fhirBundleResponseFor(OpenMrsPrescription openMrsPrescription) { @@ -21,7 +23,7 @@ BundledPrescriptionResponse fhirBundleResponseFor(OpenMrsPrescription openMrsPre OrganizationContext organizationContext = organizationContextService.buildContext(); Bundle prescriptionBundle = FhirPrescription - .from(openMrsPrescription) + .from(openMrsPrescription, fhirResourceMapper) .bundle(organizationContext.webUrl()); CareContext careContext = careContextService.careContextFor( From f09f6fb921c1d60eb6e50d25d04570c96ddf1cc4 Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 12:33:18 +0530 Subject: [PATCH 049/264] HIP-62 | Raghavi | use openmrs fhir module to translate practitioner --- .../hip/web/model/FhirPrescription.java | 10 +++++--- .../hip/web/service/FHIRResourceMapper.java | 25 ++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 071d2855..0bfd3b67 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -9,6 +9,8 @@ import java.util.*; import java.util.stream.Collectors; +import static org.bahmni.module.hip.web.service.FHIRResourceMapper.mapToEncounter; + @Getter public class FhirPrescription { @@ -38,8 +40,8 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHI Integer encounterId = openMrsPrescription.getEncounter().getId(); Patient patient = fhirResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); - Encounter encounter = FHIRResourceMapper.mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); - List practitioners = getPractitionersFrom(openMrsPrescription.getEncounterProviders()); + Encounter encounter = mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); + List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsPrescription.getEncounterProviders()); List medicationRequests = medicationRequestsFor(openMrsPrescription.getDrugOrders(), patientReference, practitioners.get(0)); List medications = medicationsFor(openMrsPrescription.getDrugOrders()); @@ -121,10 +123,10 @@ private static List medicationsFor(DrugOrders drugOrders) { .collect(Collectors.toList()); } - private static List getPractitionersFrom(Set encounterProviders) { + private static List getPractitionersFrom(FHIRResourceMapper fhirResourceMapper, Set encounterProviders) { return encounterProviders .stream() - .map(FHIRResourceMapper::mapToPractitioner) + .map(fhirResourceMapper::mapToPractitioner) .collect(Collectors.toList()); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 62eaefda..5d23afc9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -8,17 +8,22 @@ import org.hl7.fhir.r4.model.*; import org.openmrs.*; import org.openmrs.module.fhir2.api.translators.PatientTranslator; +import org.openmrs.module.fhir2.api.translators.impl.PractitionerTranslatorProviderImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.IOException; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; @Service public class FHIRResourceMapper { private final PatientTranslator patientTranslator; + private final PractitionerTranslatorProviderImpl practitionerTranslatorProvider; private static Map encounterTypeMap = new HashMap() {{ put("ADMISSION", "IMP,inpatient encounter"); @@ -43,8 +48,9 @@ public class FHIRResourceMapper { }}; @Autowired - public FHIRResourceMapper(PatientTranslator patientTranslator) { + public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider) { this.patientTranslator = patientTranslator; + this.practitionerTranslatorProvider = practitionerTranslatorProvider; } public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { @@ -106,19 +112,8 @@ private static HumanName mapToHumanName(PersonName personName) { return humanName; } - public static Practitioner mapToPractitioner(EncounterProvider encounterProvider) { - Practitioner practitioner = new Practitioner(); - Provider provider = encounterProvider.getProvider(); - practitioner.setId(provider.getIdentifier()); - List attributes = provider.getAttributes().stream().filter( - providerAttribute -> providerAttribute.getAttributeType().getName().equalsIgnoreCase("prefix")) - .collect(Collectors.toList()); - List prefixes = attributes.stream().map(p -> new StringType(p.getValue().toString())).collect(Collectors.toList()); - HumanName humanName = mapToHumanName(provider.getPerson().getPersonName()); - humanName.setPrefix(prefixes); - practitioner.setName(Collections.singletonList(humanName)); - //TODO map identifier - return practitioner; + public Practitioner mapToPractitioner(EncounterProvider encounterProvider) { + return practitionerTranslatorProvider.toFhirResource(encounterProvider.getProvider()); } public static MedicationRequest mapToMedicationRequest(DrugOrder order, From 6507235a80a9deed29d1d73cc3d6021c94e94268 Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 12:59:59 +0530 Subject: [PATCH 050/264] HIP-62 | Raghavi | 1. use openmrs fhir module to translate medication requests 2. remove unnecessary code --- .../hip/web/model/FhirPrescription.java | 17 +---- .../hip/web/service/FHIRResourceMapper.java | 71 ++----------------- .../module/hip/web/service/FHIRUtils.java | 30 +------- 3 files changed, 10 insertions(+), 108 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 0bfd3b67..e253d807 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -42,7 +42,7 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHI Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsPrescription.getEncounterProviders()); - List medicationRequests = medicationRequestsFor(openMrsPrescription.getDrugOrders(), patientReference, practitioners.get(0)); + List medicationRequests = medicationRequestsFor(fhirResourceMapper, openMrsPrescription.getDrugOrders()); List medications = medicationsFor(openMrsPrescription.getDrugOrders()); return new FhirPrescription(encounterDatetime, encounterId, encounter, practitioners, patient, patientReference, medications, medicationRequests); @@ -97,21 +97,10 @@ private Composition initializeComposition(Date encounterTimestamp, String webURL return composition; } - private static List medicationRequestsFor( - DrugOrders drugOrders, - Reference patientReference, - Practitioner practitioner) { + private static List medicationRequestsFor(FHIRResourceMapper fhirResourceMapper, DrugOrders drugOrders) { return drugOrders .stream() - .map(drugOrder -> { - Medication medication = FHIRResourceMapper.mapToMedication(drugOrder); - return FHIRResourceMapper.mapToMedicationRequest( - drugOrder, - patientReference, - practitioner, - medication - ); - }) + .map(fhirResourceMapper::mapToMedicationRequest) .collect(Collectors.toList()); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 5d23afc9..9e134c66 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,18 +1,15 @@ package org.bahmni.module.hip.web.service; -import org.codehaus.jackson.JsonNode; -import org.codehaus.jackson.map.ObjectMapper; -import org.hl7.fhir.instance.model.api.IBaseResource; import org.hl7.fhir.r4.model.Encounter; import org.hl7.fhir.r4.model.Patient; import org.hl7.fhir.r4.model.*; import org.openmrs.*; +import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import org.openmrs.module.fhir2.api.translators.PatientTranslator; import org.openmrs.module.fhir2.api.translators.impl.PractitionerTranslatorProviderImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -24,6 +21,7 @@ public class FHIRResourceMapper { private final PatientTranslator patientTranslator; private final PractitionerTranslatorProviderImpl practitionerTranslatorProvider; + private final MedicationRequestTranslator medicationRequestTranslator; private static Map encounterTypeMap = new HashMap() {{ put("ADMISSION", "IMP,inpatient encounter"); @@ -48,9 +46,10 @@ public class FHIRResourceMapper { }}; @Autowired - public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider) { + public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator) { this.patientTranslator = patientTranslator; this.practitionerTranslatorProvider = practitionerTranslatorProvider; + this.medicationRequestTranslator = medicationRequestTranslator; } public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { @@ -104,54 +103,12 @@ public Patient mapToPatient(org.openmrs.Patient emrPatient) { return patientTranslator.toFhirResource(emrPatient); } - private static HumanName mapToHumanName(PersonName personName) { - HumanName humanName = new HumanName(); - humanName.setFamily(personName.getFamilyName()); - humanName.addGiven(personName.getGivenName()); - humanName.setText(personName.getFullName()); - return humanName; - } - public Practitioner mapToPractitioner(EncounterProvider encounterProvider) { return practitionerTranslatorProvider.toFhirResource(encounterProvider.getProvider()); } - public static MedicationRequest mapToMedicationRequest(DrugOrder order, - Reference patientRef, - IBaseResource author, - Medication medication) { - MedicationRequest medReq = new MedicationRequest(); - medReq.setId(order.getOrderId().toString()); - - medReq.setStatus(MedicationRequest.MedicationRequestStatus.ACTIVE); - medReq.setIntent(MedicationRequest.MedicationRequestIntent.ORDER); - - Reference authorRef = new Reference(); - authorRef.setResource(author); - medReq.setRequester(authorRef); - medReq.setAuthoredOn(order.getDateCreated()); - medReq.setSubject(patientRef); - - if (medication == null) { - CodeableConcept medCodeableConcept = new CodeableConcept(); - medCodeableConcept.setText(order.getDrugNonCoded()); - medReq.setMedication(medCodeableConcept); - } else { - Reference medicationRef = FHIRUtils.getReferenceToResource(medication); - medicationRef.setResource(medication); - medReq.setMedication(medicationRef); - } - - medReq.addDosageInstruction().setText(getDosingInstruction(order)); - if (!Utils.isBlank(order.getCommentToFulfiller())) { - //TODO - should be in dispense instruction - medReq.addNote().setText(order.getCommentToFulfiller()); - } - - //NOTE: Openmrs does not have means to adding specific reason but we can potentially get something from - //dosage instruction as text - //medReq.setReasonReference(some condition); - return medReq; + public MedicationRequest mapToMedicationRequest(DrugOrder order) { + return medicationRequestTranslator.toFhirResource(order); } public static Medication mapToMedication(DrugOrder order) { @@ -205,20 +162,4 @@ private static String getCodingSystem(ConceptSource conceptSource) { //TODO return conceptSource.getHl7Code(); } - - - private static String getDosingInstruction(DrugOrder order) { - boolean bahmniSystem = order.getDosingType().getName().equals("org.openmrs.module.bahmniemrapi.drugorder.dosinginstructions.FlexibleDosingInstructions"); - if (bahmniSystem) { - ObjectMapper objectMapper = new ObjectMapper(); - try { - JsonNode jsonNode = objectMapper.readTree(order.getDosingInstructions()); - return jsonNode.get("instructions").asText(); - } catch (IOException e) { - e.printStackTrace(); - return ""; - } - } - return order.getDosingInstructions(); - } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index be365093..9bd1e101 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -1,21 +1,11 @@ package org.bahmni.module.hip.web.service; -import org.hl7.fhir.r4.model.Bundle; -import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Coding; -import org.hl7.fhir.r4.model.Enumerations; -import org.hl7.fhir.r4.model.Identifier; -import org.hl7.fhir.r4.model.Meta; -import org.hl7.fhir.r4.model.Organization; -import org.hl7.fhir.r4.model.Practitioner; -import org.hl7.fhir.r4.model.Reference; -import org.hl7.fhir.r4.model.Resource; +import org.hl7.fhir.r4.model.*; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; public class FHIRUtils { private static Map genderMap = new HashMap() {{ @@ -76,10 +66,6 @@ public static void addToBundleEntry(Bundle bundle, List reso resources.forEach(resource -> FHIRUtils.addToBundleEntry(bundle, resource, useIdPart)); } - private static String getHospitalSystemForType(String hospitalDomain, String type) { - return String.format(Constants.HOSPITAL_SYSTEM, hospitalDomain, type); - } - public static Organization createOrgInstance(String hfrId, String hfrName, String hfrSystem) { Organization organization = new Organization(); organization.setId(hfrId); @@ -97,20 +83,6 @@ public static Reference getReferenceToResource(Resource res) { return ref; } - public static List getEmrPatientIdentifiers(org.openmrs.Patient emrPatient) { - return emrPatient.getIdentifiers().stream().map(id -> { - Identifier identifier = new Identifier(); - identifier.setValue(id.getIdentifier()); - return identifier; - }).collect(Collectors.toList()); - } - - public static Enumerations.AdministrativeGender getGender(String gender) { - Enumerations.AdministrativeGender patientGender = genderMap.get(gender.toUpperCase()); - return patientGender != null ? patientGender : Enumerations.AdministrativeGender.UNKNOWN; - } - - public static String getDisplay(Practitioner author) { String prefixAsSingleString = author.getNameFirstRep().getPrefixAsSingleString(); if ("".equals(prefixAsSingleString)) { From a2c5816460e493be5955eb6e094ce83ee843716b Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 17:51:22 +0530 Subject: [PATCH 051/264] HIP-62 | Raghavi,Sangita | 1. use openmrs fhir module to translate medications 2. Adding a separate file for ControllerAdvice --- .../BundledMedicationRequestController.java | 24 ------------ .../web/controller/HipControllerAdvice.java | 37 +++++++++++++++++++ .../controller/PrescriptionController.java | 21 +++-------- .../hip/web/model/FhirPrescription.java | 6 +-- .../hip/web/service/FHIRResourceMapper.java | 33 ++++------------- 5 files changed, 53 insertions(+), 68 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java index 3bbfd01b..c2cbad44 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestController.java @@ -1,13 +1,11 @@ package org.bahmni.module.hip.web.controller; import org.bahmni.module.hip.web.exception.RequestParameterMissingException; -import org.bahmni.module.hip.web.model.ErrorResponse; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.hl7.fhir.r4.model.Bundle; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.validation.annotation.Validated; @@ -19,7 +17,6 @@ @RestController @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") public class BundledMedicationRequestController { - private BundleMedicationRequestService bundledMedicationRequestService; @Autowired @@ -44,25 +41,4 @@ ResponseEntity getBundledMedicationRequestFor(@RequestParam(required = f .body(serializeBundle(bundle)); } - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(RequestParameterMissingException.class) - public @ResponseBody - ErrorResponse missingRequestParameter(Exception ex) { - return new ErrorResponse(ex.getMessage()); - } - - @ResponseBody - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(IllegalArgumentException.class) - public String illegalArgumentException(Exception ex) { - return ex.getMessage(); - } - - @ResponseBody - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(Exception.class) - public String genericException(Exception ex) { - return "Something went wrong!!"; - } - } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java new file mode 100644 index 00000000..28aadd7d --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java @@ -0,0 +1,37 @@ +package org.bahmni.module.hip.web.controller; + +import org.apache.log4j.Logger; +import org.bahmni.module.hip.web.exception.RequestParameterMissingException; +import org.bahmni.module.hip.web.model.ErrorResponse; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ControllerAdvice +public class HipControllerAdvice { + private static final Logger log = Logger.getLogger(HipControllerAdvice.class); + + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(RequestParameterMissingException.class) + public @ResponseBody + ErrorResponse missingRequestParameter(Exception ex) { + return new ErrorResponse(ex.getMessage()); + } + + @ResponseBody + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(IllegalArgumentException.class) + public String illegalArgumentException(Exception ex) { + return ex.getMessage(); + } + + @ResponseBody + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(Exception.class) + public ErrorResponse genericException(Exception ex) { + log.error(ex.getMessage(), ex); + return new ErrorResponse(ex.getMessage()); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 950979e2..052f743c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -1,6 +1,5 @@ package org.bahmni.module.hip.web.controller; -import org.apache.log4j.Logger; import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.service.PrescriptionService; @@ -24,7 +23,6 @@ @Controller public class PrescriptionController { private PrescriptionService prescriptionService; - private static final Logger log = Logger.getLogger(PrescriptionController.class); @Autowired public PrescriptionController(PrescriptionService prescriptionService) { @@ -34,19 +32,12 @@ public PrescriptionController(PrescriptionService prescriptionService) { @RequestMapping(method = RequestMethod.GET, value = "/prescriptions", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody ResponseEntity get(@RequestParam String patientId) { - try { - List bundledPrescriptionResponse = - prescriptionService.getPrescriptions(patientId, new DateRange(getFromDate(), new Date())); - - return ResponseEntity.ok() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(bundledPrescriptionResponse); - } catch (Exception e) { - log.error("Error occurred while trying to call prescriptionService.getPrescriptions", e); - return ResponseEntity.badRequest() - .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(e.getMessage()); - } + // todo: define from and to date and visit type as query params + List bundledPrescriptionResponse = + prescriptionService.getPrescriptions(patientId, new DateRange(getFromDate(), new Date())); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(bundledPrescriptionResponse); } private Date getFromDate() { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index e253d807..418d0d7a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -43,7 +43,7 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHI Encounter encounter = mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsPrescription.getEncounterProviders()); List medicationRequests = medicationRequestsFor(fhirResourceMapper, openMrsPrescription.getDrugOrders()); - List medications = medicationsFor(openMrsPrescription.getDrugOrders()); + List medications = medicationsFor(fhirResourceMapper, openMrsPrescription.getDrugOrders()); return new FhirPrescription(encounterDatetime, encounterId, encounter, practitioners, patient, patientReference, medications, medicationRequests); } @@ -104,10 +104,10 @@ private static List medicationRequestsFor(FHIRResourceMapper .collect(Collectors.toList()); } - private static List medicationsFor(DrugOrders drugOrders) { + private static List medicationsFor(FHIRResourceMapper fhirResourceMapper, DrugOrders drugOrders) { return drugOrders .stream() - .map(FHIRResourceMapper::mapToMedication) + .map(fhirResourceMapper::mapToMedication) .filter(medication -> !Objects.isNull(medication)) .collect(Collectors.toList()); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 9e134c66..ef54e649 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -5,6 +5,7 @@ import org.hl7.fhir.r4.model.*; import org.openmrs.*; import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; +import org.openmrs.module.fhir2.api.translators.MedicationTranslator; import org.openmrs.module.fhir2.api.translators.PatientTranslator; import org.openmrs.module.fhir2.api.translators.impl.PractitionerTranslatorProviderImpl; import org.springframework.beans.factory.annotation.Autowired; @@ -22,6 +23,7 @@ public class FHIRResourceMapper { private final PatientTranslator patientTranslator; private final PractitionerTranslatorProviderImpl practitionerTranslatorProvider; private final MedicationRequestTranslator medicationRequestTranslator; + private final MedicationTranslator medicationTranslator; private static Map encounterTypeMap = new HashMap() {{ put("ADMISSION", "IMP,inpatient encounter"); @@ -46,10 +48,11 @@ public class FHIRResourceMapper { }}; @Autowired - public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator) { + public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator) { this.patientTranslator = patientTranslator; this.practitionerTranslatorProvider = practitionerTranslatorProvider; this.medicationRequestTranslator = medicationRequestTranslator; + this.medicationTranslator = medicationTranslator; } public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { @@ -111,33 +114,11 @@ public MedicationRequest mapToMedicationRequest(DrugOrder order) { return medicationRequestTranslator.toFhirResource(order); } - public static Medication mapToMedication(DrugOrder order) { - if (!Utils.isBlank(order.getDrugNonCoded())) { + public Medication mapToMedication(DrugOrder order) { + if (order.getDrug() == null) { return null; } - Medication medication = new Medication(); - Drug drug = order.getDrug(); - String drugId, drugName; - List codings; - if (drug == null) { - drugId = order.getConcept().getUuid(); - drugName = order.getConcept().getName().getName(); - codings = order.getConcept().getConceptMappings().stream().map(cm -> { - return mapToCodeableConcept(cm.getConceptReferenceTerm()); - }).collect(Collectors.toList()); - } else { - drugId = drug.getUuid(); - drugName = drug.getDisplayName(); - codings = mapToCodeableConcept(drug.getDrugReferenceMaps()); - } - medication.setId(drugId); - CodeableConcept concept = new CodeableConcept(); - concept.setText(drugName); - if (codings != null && !codings.isEmpty()) { - concept.setCoding(codings); - } - medication.setCode(concept); - return medication; + return medicationTranslator.toFhirResource(order.getDrug()); } private static Coding mapToCodeableConcept(ConceptReferenceTerm crt) { From da2f4aee3c806e815be0b2db586bdddc4a9cfc00 Mon Sep 17 00:00:00 2001 From: raghavi Date: Mon, 28 Sep 2020 18:03:01 +0530 Subject: [PATCH 052/264] HIP-62 | Raghavi,Sangita | 1. use openmrs fhir module to translate encounters --- .../hip/web/model/FhirPrescription.java | 4 +- .../hip/web/service/FHIRResourceMapper.java | 107 ++---------------- 2 files changed, 9 insertions(+), 102 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index 418d0d7a..28e77635 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -9,8 +9,6 @@ import java.util.*; import java.util.stream.Collectors; -import static org.bahmni.module.hip.web.service.FHIRResourceMapper.mapToEncounter; - @Getter public class FhirPrescription { @@ -40,7 +38,7 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHI Integer encounterId = openMrsPrescription.getEncounter().getId(); Patient patient = fhirResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); - Encounter encounter = mapToEncounter(openMrsPrescription.getEncounter()).setSubject(patientReference); + Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsPrescription.getEncounter()); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsPrescription.getEncounterProviders()); List medicationRequests = medicationRequestsFor(fhirResourceMapper, openMrsPrescription.getDrugOrders()); List medications = medicationsFor(fhirResourceMapper, openMrsPrescription.getDrugOrders()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index ef54e649..e7ac4d16 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,22 +1,16 @@ package org.bahmni.module.hip.web.service; -import org.hl7.fhir.r4.model.Encounter; -import org.hl7.fhir.r4.model.Patient; import org.hl7.fhir.r4.model.*; -import org.openmrs.*; +import org.openmrs.DrugOrder; +import org.openmrs.EncounterProvider; import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import org.openmrs.module.fhir2.api.translators.MedicationTranslator; import org.openmrs.module.fhir2.api.translators.PatientTranslator; +import org.openmrs.module.fhir2.api.translators.impl.EncounterTranslatorImpl; import org.openmrs.module.fhir2.api.translators.impl.PractitionerTranslatorProviderImpl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.stream.Collectors; - @Service public class FHIRResourceMapper { @@ -24,82 +18,19 @@ public class FHIRResourceMapper { private final PractitionerTranslatorProviderImpl practitionerTranslatorProvider; private final MedicationRequestTranslator medicationRequestTranslator; private final MedicationTranslator medicationTranslator; - - private static Map encounterTypeMap = new HashMap() {{ - put("ADMISSION", "IMP,inpatient encounter"); - put("CONSULTATION", "AMB,ambulatory"); - put("DISCHARGE", "IMP,inpatient encounter"); - put("REG", "AMB,ambulatory"); - put("TRANSFER", "IMP,inpatient encounter"); - }}; - - private static Map visitTypeMap = new HashMap() {{ - put("IPD", "IMP,inpatient encounter"); - put("OPD", "AMB,ambulatory"); - put("EMERGENCY", "EMER,emergency"); - put("FIELD", "FLD,field"); - }}; - - private static Map conceptSourceSystemMap = new HashMap() {{ - put("SCT", "http://snomed.info/sct"); - put("ICD-10-WHO", "http://hl7.org/fhir/ValueSet/icd-10"); - put("ATC", "http://www.whocc.no/atc"); - put("EXAMPLE", "http://example.org/codes"); - }}; + private final EncounterTranslatorImpl encounterTranslator; @Autowired - public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator) { + public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator, EncounterTranslatorImpl encounterTranslator) { this.patientTranslator = patientTranslator; this.practitionerTranslatorProvider = practitionerTranslatorProvider; this.medicationRequestTranslator = medicationRequestTranslator; this.medicationTranslator = medicationTranslator; + this.encounterTranslator = encounterTranslator; } - public static Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { - Encounter encounter = new Encounter(); - Period period = new Period(); - Visit visit = emrEncounter.getVisit(); - boolean isOPVisit = visit.getVisitType().getName().equalsIgnoreCase("OPD"); - //TODO: the mapping needs to be fixed - /** - * In case of Inpatient visit - * - the period should be entire hospitalization period, and mentioned through encounter.location.period - * - and in that case, encounter.participant.period should be specified for each practitioner encounter period - * In case of outpatient visit - * - encounter.period ought to be still visit period - * - while participant.period should be period of the specific encounter - */ - //TODO fix as per above - if (isOPVisit) { - period.setStart(emrEncounter.getEncounterDatetime()); - period.setEnd(emrEncounter.getEncounterDatetime()); - } else { - period.setStart(visit.getStartDatetime()); - period.setEnd(visit.getStopDatetime()); - } - - encounter.setPeriod(period); - encounter.setStatus(Encounter.EncounterStatus.FINISHED); - Coding coding = new Coding(); - coding.setSystem(Constants.FHIR_ENC_CLASS_SYSTEM); - - String encounterClassDetails = getEncounterClass(visit.getVisitType().getName()); - String[] parts = encounterClassDetails.split(","); - coding.setCode(parts[0]); - coding.setDisplay(parts[1]); - encounter.setClass_(coding); - encounter.setId(emrEncounter.getUuid()); - - //TODO - add encounter.location - return encounter; - } - - private static String getEncounterClass(String visitType) { - String encClassDetails = visitTypeMap.get(visitType.toLowerCase()); - if (encClassDetails == null) { - encClassDetails = visitTypeMap.get("OPD"); - } - return encClassDetails; + public Encounter mapToEncounter(org.openmrs.Encounter emrEncounter) { + return encounterTranslator.toFhirResource(emrEncounter); } public Patient mapToPatient(org.openmrs.Patient emrPatient) { @@ -121,26 +52,4 @@ public Medication mapToMedication(DrugOrder order) { return medicationTranslator.toFhirResource(order.getDrug()); } - private static Coding mapToCodeableConcept(ConceptReferenceTerm crt) { - Coding coding = new Coding(); - coding.setSystem(getCodingSystem(crt.getConceptSource())); - coding.setCode(crt.getCode()); - coding.setDisplay(crt.getName()); - return coding; - } - - private static List mapToCodeableConcept(Set drugReferenceMaps) { - return drugReferenceMaps.stream().map(drm -> { - Coding coding = new Coding(); - coding.setSystem(getCodingSystem(drm.getConceptReferenceTerm().getConceptSource())); - coding.setCode(drm.getConceptReferenceTerm().getCode()); - coding.setDisplay(drm.getConceptReferenceTerm().getName()); - return coding; - }).collect(Collectors.toList()); - } - - private static String getCodingSystem(ConceptSource conceptSource) { - //TODO - return conceptSource.getHl7Code(); - } } From 106b68294ac2f4fb4ec1b91f9c7b5c51e7174c01 Mon Sep 17 00:00:00 2001 From: raghavi Date: Tue, 29 Sep 2020 11:42:10 +0530 Subject: [PATCH 053/264] HIP-62 | Raghavi,Sangita | adds fromDate and toDate as query params in prescription service --- .../controller/PrescriptionController.java | 33 ++++++++----------- .../model/BundledPrescriptionResponse.java | 15 +++------ .../hip/web/model/PrescriptionBundle.java | 19 +++++++++++ .../FhirBundledPrescriptionBuilder.java | 4 +-- .../hip/web/service/PrescriptionService.java | 4 +-- .../module/hip/web/utils/DateUtils.java | 12 +++++++ 6 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionBundle.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 052f743c..0dbd8de6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -2,25 +2,22 @@ import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.PrescriptionBundle; import org.bahmni.module.hip.web.service.PrescriptionService; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.*; -import java.time.LocalDateTime; -import java.time.ZoneId; -import java.util.Date; +import java.text.ParseException; import java.util.List; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; + @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") -@Controller +@RestController public class PrescriptionController { private PrescriptionService prescriptionService; @@ -31,18 +28,16 @@ public PrescriptionController(PrescriptionService prescriptionService) { @RequestMapping(method = RequestMethod.GET, value = "/prescriptions", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get(@RequestParam String patientId) { + ResponseEntity get( + @RequestParam String patientId, + @RequestParam String fromDate, + @RequestParam String toDate + ) throws ParseException { // todo: define from and to date and visit type as query params - List bundledPrescriptionResponse = - prescriptionService.getPrescriptions(patientId, new DateRange(getFromDate(), new Date())); + List prescriptionBundle = + prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate))); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(bundledPrescriptionResponse); - } - - private Date getFromDate() { - LocalDateTime dateTime = LocalDateTime.now(); - dateTime = dateTime.minusDays(60); - return Date.from(dateTime.atZone(ZoneId.systemDefault()).toInstant()); + .body(new BundledPrescriptionResponse(prescriptionBundle)); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java index c9574a29..ba1b4357 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledPrescriptionResponse.java @@ -1,19 +1,14 @@ package org.bahmni.module.hip.web.model; -import lombok.Builder; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -import org.bahmni.module.hip.web.model.serializers.FhirBundleSerializer; -import org.codehaus.jackson.map.annotate.JsonSerialize; -import org.hl7.fhir.r4.model.Bundle; -@Builder +import java.util.List; + +@AllArgsConstructor @Getter @Setter public class BundledPrescriptionResponse { - private CareContext careContext; - - @JsonSerialize(using = FhirBundleSerializer.class) - private Bundle bundle; - + private List prescriptions; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionBundle.java b/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionBundle.java new file mode 100644 index 00000000..d6badb10 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/PrescriptionBundle.java @@ -0,0 +1,19 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.bahmni.module.hip.web.model.serializers.FhirBundleSerializer; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.hl7.fhir.r4.model.Bundle; + +@Builder +@Getter +@Setter +public class PrescriptionBundle { + private CareContext careContext; + + @JsonSerialize(using = FhirBundleSerializer.class) + private Bundle bundle; + +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java index 0b49720c..767bdc4b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledPrescriptionBuilder.java @@ -18,7 +18,7 @@ public FhirBundledPrescriptionBuilder(CareContextService careContextService, Org this.fhirResourceMapper = fhirResourceMapper; } - BundledPrescriptionResponse fhirBundleResponseFor(OpenMrsPrescription openMrsPrescription) { + PrescriptionBundle fhirBundleResponseFor(OpenMrsPrescription openMrsPrescription) { OrganizationContext organizationContext = organizationContextService.buildContext(); @@ -30,7 +30,7 @@ BundledPrescriptionResponse fhirBundleResponseFor(OpenMrsPrescription openMrsPre openMrsPrescription.getEncounter(), organizationContext.careContextType()); - return BundledPrescriptionResponse.builder() + return PrescriptionBundle.builder() .bundle(prescriptionBundle) .careContext(careContext) .build(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 95f6e6a8..83ff31d1 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -2,7 +2,7 @@ import org.apache.log4j.Logger; -import org.bahmni.module.hip.web.model.BundledPrescriptionResponse; +import org.bahmni.module.hip.web.model.PrescriptionBundle; import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.model.DrugOrders; import org.bahmni.module.hip.web.model.OpenMrsPrescription; @@ -27,7 +27,7 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, DateRange dateRange) { + public List getPrescriptions(String patientIdUuid, DateRange dateRange) { DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateFor(patientIdUuid, dateRange)); if (drugOrders.isEmpty()) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java new file mode 100644 index 00000000..bd34af1c --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java @@ -0,0 +1,12 @@ +package org.bahmni.module.hip.web.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +public class DateUtils { + public static Date parseDate(String date) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + return dateFormat.parse(date); + } +} From 01d20f2d9daf8471f6396d797b55569e58c0cacf Mon Sep 17 00:00:00 2001 From: raghavi Date: Tue, 29 Sep 2020 12:52:44 +0530 Subject: [PATCH 054/264] HIP-62 | Raghavi,Sangita | adds PrescriptionControllerTest --- omod/pom.xml | 14 +++-- .../module/hip/web/TestConfiguration.java | 22 ++++++++ ...ationRequestControllerIntegrationTest.java | 12 +---- .../PrescriptionControllerTest.java | 54 +++++++++++++++++++ 4 files changed, 83 insertions(+), 19 deletions(-) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java diff --git a/omod/pom.xml b/omod/pom.xml index 613944b9..81aaaa04 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -63,6 +63,12 @@ 1.2.1.RELEASE test + + javax.xml.bind + jaxb-api + 2.3.0 + test + @@ -70,14 +76,6 @@ ${project.artifactId}-${project.version} - - org.openmrs.maven.plugins - maven-openmrs-plugin - - - org.apache.maven.plugins - maven-dependency-plugin - org.openmrs.maven.plugins maven-openmrs-plugin diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java new file mode 100644 index 00000000..010d1e16 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -0,0 +1,22 @@ +package org.bahmni.module.hip.web; + +import org.bahmni.module.hip.web.service.BundleMedicationRequestService; +import org.bahmni.module.hip.web.service.PrescriptionService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.mockito.Mockito.mock; +@Configuration +@EnableWebMvc +public class TestConfiguration { + @Bean + public BundleMedicationRequestService bundleMedicationRequestService() { + return mock(BundleMedicationRequestService.class); + } + + @Bean + public PrescriptionService prescriptionService() { + return mock(PrescriptionService.class); + } +} \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java index 9b8c4704..1c2d3c70 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/BundledMedicationRequestControllerIntegrationTest.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.controller; +import org.bahmni.module.hip.web.TestConfiguration; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.hl7.fhir.r4.model.Bundle; import org.junit.Before; @@ -7,8 +8,6 @@ import org.junit.runner.RunWith; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -22,7 +21,6 @@ import static org.junit.Assert.assertEquals; import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; @@ -135,11 +133,3 @@ public void shouldReturnVisitTypeRequestParameterIsMandatoryErrorMessage() throw assertEquals("{\"errMessage\":\"visitType is mandatory request parameter\"}", content); } } - -@Configuration -class TestConfiguration { - @Bean - public BundleMedicationRequestService bundleMedicationRequestService() { - return mock(BundleMedicationRequestService.class); - } -} \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java new file mode 100644 index 00000000..c8179009 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java @@ -0,0 +1,54 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.service.PrescriptionService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static java.util.Collections.EMPTY_LIST; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {PrescriptionController.class, TestConfiguration.class}) +@WebAppConfiguration +public class PrescriptionControllerTest { + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private PrescriptionService prescriptionService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200OkWhenfromDateToDateAndPatientIdAreGiven() throws Exception { + when(prescriptionService.getPrescriptions(anyString(), any())) + .thenReturn(EMPTY_LIST); + mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/prescriptions?patientId='0f90531a-285c-438b-b265-bb3abb4745bd'" + + "&fromDate=2020-01-01&toDate=2020-02-01") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + +} \ No newline at end of file From abf87aa23b17b8e7abe4ca8b03caf61669251994 Mon Sep 17 00:00:00 2001 From: raghavi Date: Tue, 29 Sep 2020 13:45:48 +0530 Subject: [PATCH 055/264] HIP-62 | Raghavi,Sangita | adds visitType as queryparam for fetching prescriptions --- .../hip/api/dao/PrescriptionOrderDao.java | 2 +- .../hip/api/dao/PrescriptionOrderDaoImpl.java | 23 +++++-------------- .../controller/PrescriptionController.java | 5 ++-- .../web/service/OpenMRSDrugOrderClient.java | 10 ++++---- .../hip/web/service/PrescriptionService.java | 4 ++-- .../PrescriptionControllerTest.java | 9 +++++--- .../service/OpenMRSDrugOrderClientTest.java | 5 ++-- 7 files changed, 25 insertions(+), 33 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java index 50c0ccfc..87a087ae 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java @@ -8,5 +8,5 @@ import java.util.List; public interface PrescriptionOrderDao { - public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType); + List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java index 563b5a02..09bf29c5 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java @@ -3,7 +3,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.hibernate.Criteria; -import org.hibernate.Query; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.openmrs.DrugOrder; @@ -26,8 +25,12 @@ public PrescriptionOrderDaoImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } - public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType) { - Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(DrugOrder.class); + public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType) { + Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Order.class); + criteria.createCriteria("encounter", "e") + .createCriteria("visit", "v") + .createCriteria("visitType", "vt") + .add(Restrictions.eq("name", visitType)); criteria.add(Restrictions.eq("patient", patient)); criteria.add(Restrictions.eq("orderType", orderType)); criteria.add(Restrictions.eq("voided", false)); @@ -35,18 +38,4 @@ public List getDrugOrders(Patient patient, Date fromDate, Date toDate return criteria.list(); } - public List getDrugOrders(Patient patient, Date fromDate, Date toDate) { - Query query = sessionFactory.getCurrentSession().createQuery( - "select d1 from DrugOrder d1, Encounter e, Visit v where d1.encounter = e and e.visit = v " + - "and d1.voided = false " + - "and d1.dateCreated > :fromDate and d1.dateCreated <= :toDate " + - "and not exists (select d2 from DrugOrder d2 where d2.voided = false and d2.action = :revised " + - " and d2.encounter = d1.encounter and d2.previousOrder = d1) " + - "order by d1.dateActivated desc"); - query.setParameter("revised", Order.Action.REVISE); - query.setParameter("fromDate", fromDate); - query.setParameter("toDate", toDate); - return (List) query.list(); - } - } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 0dbd8de6..498c4601 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -31,11 +31,12 @@ public PrescriptionController(PrescriptionService prescriptionService) { ResponseEntity get( @RequestParam String patientId, @RequestParam String fromDate, - @RequestParam String toDate + @RequestParam String toDate, + @RequestParam String visitType ) throws ParseException { // todo: define from and to date and visit type as query params List prescriptionBundle = - prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate))); + prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledPrescriptionResponse(prescriptionBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index a45e5282..f8650fef 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -2,10 +2,7 @@ import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.bahmni.module.hip.web.model.DateRange; -import org.openmrs.DrugOrder; -import org.openmrs.Order; -import org.openmrs.OrderType; -import org.openmrs.Patient; +import org.openmrs.*; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; @@ -47,9 +44,10 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateFor(String forPatientUUID, DateRange dateRange) { + List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType) { Patient patient = patientService.getPatientByUuid(forPatientUUID); OrderType drugOrderType = orderService.getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); - return prescriptionOrderDao.getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType); + return prescriptionOrderDao + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 83ff31d1..8c1a9691 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -27,8 +27,8 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, DateRange dateRange) { - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateFor(patientIdUuid, dateRange)); + public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType) { + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, dateRange, visitType)); if (drugOrders.isEmpty()) return new ArrayList<>(); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java index c8179009..8d283bab 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java @@ -43,10 +43,13 @@ public void setup() { @Test public void shouldReturn200OkWhenfromDateToDateAndPatientIdAreGiven() throws Exception { - when(prescriptionService.getPrescriptions(anyString(), any())) + when(prescriptionService.getPrescriptions(anyString(), any(), anyString())) .thenReturn(EMPTY_LIST); - mockMvc.perform(get("/rest/" + RestConstants.VERSION_1 + "/hip/prescriptions?patientId='0f90531a-285c-438b-b265-bb3abb4745bd'" + - "&fromDate=2020-01-01&toDate=2020-02-01") + mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions", RestConstants.VERSION_1)) + .param("visitType", "IPD") + .param("patientId", "'0f90531a-285c-438b-b265-bb3abb4745bd'") + .param("fromDate", "2020-01-01") + .param("toDate", "2020-01-31") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index 050f9f51..e8ff348b 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -110,6 +110,7 @@ public void shouldFilterInOnlyDrugOrdersThatMatchTheType() { public void shouldFetchDrugOrdersForADateRangeAndAPatient() { DateRange dateRange = new DateRange(new Date(), new Date()); String patientUUID = "0f90531a-285c-438b-b265-bb3abb4745bd"; + String visitType = "IPD"; Patient patient = mock(Patient.class); OrderType orderType = mock(OrderType.class); @@ -118,9 +119,9 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { .thenReturn(patient); when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); - openMRSDrugOrderClient.getDrugOrdersByDateFor(patientUUID, dateRange); + openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType); verify(prescriptionOrderDao, times(1)) - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType, visitType); } } From 7583c73ddea207310721d41e8965d58b0ae689fa Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Thu, 1 Oct 2020 16:11:51 +0530 Subject: [PATCH 056/264] HIP-89 | Raghavi,Sangita | adds api for fetching patient care context --- api/pom.xml | 7 ++ .../hip/api/dao/CareContextRepository.java | 9 +++ .../dao/impl/CareContextRepositoryImpl.java | 68 +++++++++++++++++++ .../{ => impl}/PrescriptionOrderDaoImpl.java | 3 +- .../module/hip/model/PatientCareContext.java | 14 ++++ .../web/controller/CareContextController.java | 31 +++++++++ .../hip/web/service/CareContextService.java | 19 +++++- 7 files changed, 149 insertions(+), 2 deletions(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java rename api/src/main/java/org/bahmni/module/hip/api/dao/{ => impl}/PrescriptionOrderDaoImpl.java (93%) create mode 100644 api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java diff --git a/api/pom.xml b/api/pom.xml index bbc9a00b..1f1cfc09 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -19,5 +19,12 @@ 2.1.1 provided + + + org.projectlombok + lombok + 1.18.10 + provided + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java new file mode 100644 index 00000000..9c913506 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -0,0 +1,9 @@ +package org.bahmni.module.hip.api.dao; + +import org.bahmni.module.hip.model.PatientCareContext; + +import java.util.List; + +public interface CareContextRepository { + public List getPatientCareContext(String patientId); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java new file mode 100644 index 00000000..70184f09 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -0,0 +1,68 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.model.PatientCareContext; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.hibernate.transform.Transformers; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class CareContextRepositoryImpl implements CareContextRepository { + private SessionFactory sessionFactory; + + @Autowired + public CareContextRepositoryImpl(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + @Override + public List getPatientCareContext(String patientId) { + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT" + + " case\n" + + " when care_context = 'PROGRAM' then patient_program_id\n" + + " else visit_type_id end as careContextReference,\n" + + " care_context as careContextType,\n" + + " case\n" + + " when care_context = 'PROGRAM' then program_name\n" + + " else visit_type_name end as careContextName\n" + + "from\n" + + " (\n" + + " select\n" + + " e.patient_id, p2.program_id, vt.visit_type_id , vt.name ,\n" + + " pp.patient_program_id , p2.name as program_name, vt.name as visit_type_name,\n" + + " case\n" + + " when p2.program_id is null then 'VISIT_TYPE'\n" + + " else 'PROGRAM'\n" + + " end as care_context\n" + + " from\n" + + " encounter e\n" + + " left join episode_encounter ee on\n" + + " e.encounter_id = ee.encounter_id\n" + + " left join episode_patient_program epp on\n" + + " ee.episode_id = epp.episode_id\n" + + " left join patient_program pp on\n" + + " epp.patient_program_id = pp.patient_program_id\n" + + " left join program p2 on\n" + + " pp.program_id = p2.program_id\n" + + " left join visit v on\n" + + " v.visit_id = e.visit_id\n" + + " and v.patient_id = e.patient_id\n" + + " left join visit_type vt on\n" + + " v.visit_type_id = vt.visit_type_id ) as a\n" + + "where\n" + + " a.patient_id = :patientId" + + " group by\n" + + " a.visit_type_id,a.patient_program_id,care_context") + .addScalar("careContextReference", IntegerType.INSTANCE) + .addScalar("careContextType", StringType.INSTANCE) + .addScalar("careContextName",StringType.INSTANCE); + query.setParameter("patientId", patientId); + return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); + } +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java similarity index 93% rename from api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java rename to api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 09bf29c5..9a84a28a 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -1,7 +1,8 @@ -package org.bahmni.module.hip.api.dao; +package org.bahmni.module.hip.api.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.hibernate.Criteria; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java new file mode 100644 index 00000000..2498f7ed --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java @@ -0,0 +1,14 @@ +package org.bahmni.module.hip.model; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Setter +@Getter +public class PatientCareContext { + private String careContextType; + private String careContextName; + private Integer careContextReference; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java new file mode 100644 index 00000000..185119ee --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java @@ -0,0 +1,31 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.model.PatientCareContext; +import org.bahmni.module.hip.web.service.CareContextService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@RestController +public class CareContextController { + private final CareContextService careContextService; + @Autowired + public CareContextController(CareContextService careContextService) { + this.careContextService = careContextService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/careContext", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity> getCareContextForPatient(@RequestParam String patientId){ + return ResponseEntity.ok(careContextService.careContextForPatient(patientId)); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java index 91185bbd..84287670 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -1,12 +1,24 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.api.dao.CareContextRepository; import org.bahmni.module.hip.web.model.CareContext; +import org.bahmni.module.hip.model.PatientCareContext; import org.openmrs.Encounter; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; + @Service public class CareContextService { - CareContext careContextFor(Encounter emrEncounter, Class careContextType) { + private final CareContextRepository careContextRepository; + + @Autowired + public CareContextService(CareContextRepository careContextRepository) { + this.careContextRepository = careContextRepository; + } + + CareContext careContextFor(Encounter emrEncounter, Class careContextType) { if (careContextType.getName().equals("Visit")) { return CareContext.builder() .careContextReference(emrEncounter.getVisit().getUuid()) @@ -17,4 +29,9 @@ CareContext careContextFor(Encounter emrEncounter, Class careContextType) { .careContextType("VisitType").build(); } } + + public List careContextForPatient(String patientId){ + return careContextRepository.getPatientCareContext(patientId); + } + } From 8b1526b2e3d4a122a01d00b90355d3beb0f09dec Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Mon, 5 Oct 2020 10:47:51 +0530 Subject: [PATCH 057/264] HIP-89 | Sangita | adds CareContextServiceTest,CareContextControllerTest --- .../hip/api/dao/CareContextRepository.java | 2 +- .../module/hip/web/TestConfiguration.java | 6 ++ .../controller/CareContextControllerTest.java | 55 +++++++++++++++++++ .../web/service/CareContextServiceTest.java | 33 +++++++++++ 4 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java index 9c913506..ff6cb606 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -5,5 +5,5 @@ import java.util.List; public interface CareContextRepository { - public List getPatientCareContext(String patientId); + List getPatientCareContext(String patientId); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java index 010d1e16..34b389e6 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; +import org.bahmni.module.hip.web.service.CareContextService; import org.bahmni.module.hip.web.service.PrescriptionService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -19,4 +20,9 @@ public BundleMedicationRequestService bundleMedicationRequestService() { public PrescriptionService prescriptionService() { return mock(PrescriptionService.class); } + + @Bean + public CareContextService careContextService() { + return mock(CareContextService.class); + } } \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java new file mode 100644 index 00000000..6d68b5ed --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java @@ -0,0 +1,55 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.service.CareContextService; +import org.bahmni.module.hip.web.service.CareContextServiceTest; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static java.util.Collections.EMPTY_LIST; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {CareContextController.class, TestConfiguration.class}) +@WebAppConfiguration +public class CareContextControllerTest { + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private CareContextService careContextService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200OkWhenPatientIdIsGiven() throws Exception { + when(careContextService.careContextForPatient(anyString())) + .thenReturn(EMPTY_LIST); + + mockMvc.perform(get(String.format("/rest/%s/hip/careContext", RestConstants.VERSION_1)) + .param("patientId", "72") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java new file mode 100644 index 00000000..41794d14 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java @@ -0,0 +1,33 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.model.PatientCareContext; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class CareContextServiceTest { + private CareContextRepository careContextRepository = mock(CareContextRepository.class); + + private CareContextService careContextServiceObject = new CareContextService(careContextRepository); + + @Test + public void shouldFetchAllCareContextForPatient() { + String patientId = "0f90531a-285c-438b-b265-bb3abb4745bd"; + List careContexts = new ArrayList<>(); + + when(careContextRepository.getPatientCareContext(patientId)) + .thenReturn(careContexts); + + careContextServiceObject.careContextForPatient(patientId); + + verify(careContextRepository, times(1)) + .getPatientCareContext(patientId); + } +} From dcbe30b71d56cdb70a10d8174cdacdb6d952c7b3 Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Thu, 1 Oct 2020 16:11:51 +0530 Subject: [PATCH 058/264] HIP-89 | Raghavi/Sangita | Adds api for fetching patient care context --- api/pom.xml | 7 ++ .../hip/api/dao/CareContextRepository.java | 9 +++ .../dao/impl/CareContextRepositoryImpl.java | 68 +++++++++++++++++++ .../{ => impl}/PrescriptionOrderDaoImpl.java | 3 +- .../module/hip/model/PatientCareContext.java | 14 ++++ .../web/controller/CareContextController.java | 31 +++++++++ .../hip/web/service/CareContextService.java | 37 ++++++++++ 7 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java rename api/src/main/java/org/bahmni/module/hip/api/dao/{ => impl}/PrescriptionOrderDaoImpl.java (95%) create mode 100644 api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java diff --git a/api/pom.xml b/api/pom.xml index bbc9a00b..1f1cfc09 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -19,5 +19,12 @@ 2.1.1 provided + + + org.projectlombok + lombok + 1.18.10 + provided + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java new file mode 100644 index 00000000..9c913506 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -0,0 +1,9 @@ +package org.bahmni.module.hip.api.dao; + +import org.bahmni.module.hip.model.PatientCareContext; + +import java.util.List; + +public interface CareContextRepository { + public List getPatientCareContext(String patientId); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java new file mode 100644 index 00000000..70184f09 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -0,0 +1,68 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.model.PatientCareContext; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.hibernate.transform.Transformers; +import org.hibernate.type.IntegerType; +import org.hibernate.type.StringType; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class CareContextRepositoryImpl implements CareContextRepository { + private SessionFactory sessionFactory; + + @Autowired + public CareContextRepositoryImpl(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + @Override + public List getPatientCareContext(String patientId) { + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT" + + " case\n" + + " when care_context = 'PROGRAM' then patient_program_id\n" + + " else visit_type_id end as careContextReference,\n" + + " care_context as careContextType,\n" + + " case\n" + + " when care_context = 'PROGRAM' then program_name\n" + + " else visit_type_name end as careContextName\n" + + "from\n" + + " (\n" + + " select\n" + + " e.patient_id, p2.program_id, vt.visit_type_id , vt.name ,\n" + + " pp.patient_program_id , p2.name as program_name, vt.name as visit_type_name,\n" + + " case\n" + + " when p2.program_id is null then 'VISIT_TYPE'\n" + + " else 'PROGRAM'\n" + + " end as care_context\n" + + " from\n" + + " encounter e\n" + + " left join episode_encounter ee on\n" + + " e.encounter_id = ee.encounter_id\n" + + " left join episode_patient_program epp on\n" + + " ee.episode_id = epp.episode_id\n" + + " left join patient_program pp on\n" + + " epp.patient_program_id = pp.patient_program_id\n" + + " left join program p2 on\n" + + " pp.program_id = p2.program_id\n" + + " left join visit v on\n" + + " v.visit_id = e.visit_id\n" + + " and v.patient_id = e.patient_id\n" + + " left join visit_type vt on\n" + + " v.visit_type_id = vt.visit_type_id ) as a\n" + + "where\n" + + " a.patient_id = :patientId" + + " group by\n" + + " a.visit_type_id,a.patient_program_id,care_context") + .addScalar("careContextReference", IntegerType.INSTANCE) + .addScalar("careContextType", StringType.INSTANCE) + .addScalar("careContextName",StringType.INSTANCE); + query.setParameter("patientId", patientId); + return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); + } +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java similarity index 95% rename from api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java rename to api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 563b5a02..369bf34e 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -1,7 +1,8 @@ -package org.bahmni.module.hip.api.dao; +package org.bahmni.module.hip.api.dao.impl; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.hibernate.Criteria; import org.hibernate.Query; import org.hibernate.SessionFactory; diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java new file mode 100644 index 00000000..2498f7ed --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java @@ -0,0 +1,14 @@ +package org.bahmni.module.hip.model; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@NoArgsConstructor +@Setter +@Getter +public class PatientCareContext { + private String careContextType; + private String careContextName; + private Integer careContextReference; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java new file mode 100644 index 00000000..185119ee --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java @@ -0,0 +1,31 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.model.PatientCareContext; +import org.bahmni.module.hip.web.service.CareContextService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@RestController +public class CareContextController { + private final CareContextService careContextService; + @Autowired + public CareContextController(CareContextService careContextService) { + this.careContextService = careContextService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/careContext", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity> getCareContextForPatient(@RequestParam String patientId){ + return ResponseEntity.ok(careContextService.careContextForPatient(patientId)); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java new file mode 100644 index 00000000..84287670 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -0,0 +1,37 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.web.model.CareContext; +import org.bahmni.module.hip.model.PatientCareContext; +import org.openmrs.Encounter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class CareContextService { + private final CareContextRepository careContextRepository; + + @Autowired + public CareContextService(CareContextRepository careContextRepository) { + this.careContextRepository = careContextRepository; + } + + CareContext careContextFor(Encounter emrEncounter, Class careContextType) { + if (careContextType.getName().equals("Visit")) { + return CareContext.builder() + .careContextReference(emrEncounter.getVisit().getUuid()) + .careContextType("Visit").build(); + } else { + return CareContext.builder() + .careContextReference(emrEncounter.getVisit().getVisitType().getName()) + .careContextType("VisitType").build(); + } + } + + public List careContextForPatient(String patientId){ + return careContextRepository.getPatientCareContext(patientId); + } + +} From c11ba6ed37da47eae414dd99d301e2bd76093c78 Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Mon, 5 Oct 2020 13:47:41 +0530 Subject: [PATCH 059/264] HIP-89 | Sangita | fixes tests --- .../hip/api/dao/CareContextRepository.java | 2 +- .../dao/impl/CareContextRepositoryImpl.java | 2 +- omod/pom.xml | 32 ++++++++--- .../web/controller/CareContextController.java | 2 +- .../hip/web/service/CareContextService.java | 2 +- .../module/hip/web/TestConfiguration.java | 28 ++++++++++ .../controller/CareContextControllerTest.java | 54 +++++++++++++++++++ .../web/service/CareContextServiceTest.java | 33 ++++++++++++ 8 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java index 9c913506..0b800af0 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -5,5 +5,5 @@ import java.util.List; public interface CareContextRepository { - public List getPatientCareContext(String patientId); + List getPatientCareContext(Integer patientId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 70184f09..80712029 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -22,7 +22,7 @@ public CareContextRepositoryImpl(SessionFactory sessionFactory) { } @Override - public List getPatientCareContext(String patientId) { + public List getPatientCareContext(Integer patientId) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT" + " case\n" + " when care_context = 'PROGRAM' then patient_program_id\n" + diff --git a/omod/pom.xml b/omod/pom.xml index 1c7e8513..87b5c87d 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -46,13 +46,31 @@ provided - - - org.springframework.boot - spring-boot-starter-test - 2.3.3.RELEASE - test - + + javax.servlet + javax.servlet-api + 3.0.1 + provided + + + + + + + + + org.springframework.boot + spring-boot-starter-test + 1.2.1.RELEASE + test + + + javax.xml.bind + jaxb-api + 2.3.0 + test + + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java index 185119ee..1f79b0a3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java @@ -25,7 +25,7 @@ public CareContextController(CareContextService careContextService) { @RequestMapping(method = RequestMethod.GET, value = "/careContext", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity> getCareContextForPatient(@RequestParam String patientId){ + ResponseEntity> getCareContextForPatient(@RequestParam Integer patientId){ return ResponseEntity.ok(careContextService.careContextForPatient(patientId)); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java index 84287670..b071d192 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -30,7 +30,7 @@ CareContext careContextFor(Encounter emrEncounter, Class careContextType) { } } - public List careContextForPatient(String patientId){ + public List careContextForPatient(Integer patientId){ return careContextRepository.getPatientCareContext(patientId); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java new file mode 100644 index 00000000..34b389e6 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -0,0 +1,28 @@ +package org.bahmni.module.hip.web; + +import org.bahmni.module.hip.web.service.BundleMedicationRequestService; +import org.bahmni.module.hip.web.service.CareContextService; +import org.bahmni.module.hip.web.service.PrescriptionService; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; + +import static org.mockito.Mockito.mock; +@Configuration +@EnableWebMvc +public class TestConfiguration { + @Bean + public BundleMedicationRequestService bundleMedicationRequestService() { + return mock(BundleMedicationRequestService.class); + } + + @Bean + public PrescriptionService prescriptionService() { + return mock(PrescriptionService.class); + } + + @Bean + public CareContextService careContextService() { + return mock(CareContextService.class); + } +} \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java new file mode 100644 index 00000000..4d29373c --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java @@ -0,0 +1,54 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.service.CareContextService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static java.util.Collections.EMPTY_LIST; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {CareContextController.class, TestConfiguration.class}) +@WebAppConfiguration +public class CareContextControllerTest { + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private CareContextService careContextService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200OkWhenPatientIdIsGiven() throws Exception { + when(careContextService.careContextForPatient(anyInt())) + .thenReturn(EMPTY_LIST); + + mockMvc.perform(get(String.format("/rest/%s/hip/careContext", RestConstants.VERSION_1)) + .param("patientId", "72") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java new file mode 100644 index 00000000..6bd047be --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java @@ -0,0 +1,33 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.model.PatientCareContext; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class CareContextServiceTest { + private CareContextRepository careContextRepository = mock(CareContextRepository.class); + + private CareContextService careContextServiceObject = new CareContextService(careContextRepository); + + @Test + public void shouldFetchAllCareContextForPatient() { + Integer patientId = 70; + List careContexts = new ArrayList<>(); + + when(careContextRepository.getPatientCareContext(patientId)) + .thenReturn(careContexts); + + careContextServiceObject.careContextForPatient(patientId); + + verify(careContextRepository, times(1)) + .getPatientCareContext(patientId); + } +} From 73e4f0a86363aba9e0f828902f44c91a014ffe12 Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Mon, 5 Oct 2020 15:12:45 +0530 Subject: [PATCH 060/264] HIP-89 | Sangita | fixes issue of showing number of care context(depending on VISIT_TYPE for same Prgram --- .../module/hip/api/dao/impl/CareContextRepositoryImpl.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 80712029..ea32a7ff 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -57,8 +57,11 @@ public List getPatientCareContext(Integer patientId) { " v.visit_type_id = vt.visit_type_id ) as a\n" + "where\n" + " a.patient_id = :patientId" + - " group by\n" + - " a.visit_type_id,a.patient_program_id,care_context") + " group by " + + "care_context, " + + "case when care_context = 'PROGRAM' " + + "then patient_program_id else visit_type_id " + + "end") .addScalar("careContextReference", IntegerType.INSTANCE) .addScalar("careContextType", StringType.INSTANCE) .addScalar("careContextName",StringType.INSTANCE); From e82da37d702b6039e2e05c697fc3e2326d5801ef Mon Sep 17 00:00:00 2001 From: avghadsangita Date: Mon, 19 Oct 2020 18:48:23 +0530 Subject: [PATCH 061/264] bug-fix-of-89 | Meghna/Sangita | adds error handling and fixes bugs --- .../hip/api/dao/CareContextRepository.java | 4 +- .../dao/impl/CareContextRepositoryImpl.java | 15 +++- .../module/hip/model/PatientCareContext.java | 4 ++ omod/pom.xml | 8 +++ .../module/hip/web/client/ClientError.java | 31 ++++++++ .../module/hip/web/client/model/Error.java | 19 +++++ .../hip/web/client/model/ErrorCode.java | 33 +++++++++ .../web/client/model/ErrorRepresentation.java | 16 +++++ .../hip/web/client/model/RespError.java | 19 +++++ .../web/controller/CareContextController.java | 23 ++++-- .../web/controller/HipControllerAdvice.java | 8 +++ .../hip/web/service/CareContextService.java | 14 +++- .../module/hip/web/TestConfiguration.java | 1 + .../controller/CareContextControllerTest.java | 70 +++++++++++++++++-- .../web/service/CareContextServiceTest.java | 4 +- 15 files changed, 254 insertions(+), 15 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/model/Error.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorRepresentation.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/model/RespError.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java index ff6cb606..532d8efe 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -5,5 +5,7 @@ import java.util.List; public interface CareContextRepository { - List getPatientCareContext(String patientId); + List getPatientCareContext(Integer patientId); + + boolean isPatientIdExist(Integer patientId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 70184f09..cf178f9d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -7,6 +7,7 @@ import org.hibernate.transform.Transformers; import org.hibernate.type.IntegerType; import org.hibernate.type.StringType; +import org.openmrs.Patient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -22,7 +23,7 @@ public CareContextRepositoryImpl(SessionFactory sessionFactory) { } @Override - public List getPatientCareContext(String patientId) { + public List getPatientCareContext(Integer patientId) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT" + " case\n" + " when care_context = 'PROGRAM' then patient_program_id\n" + @@ -65,4 +66,16 @@ public List getPatientCareContext(String patientId) { query.setParameter("patientId", patientId); return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); } + + @Override + public boolean isPatientIdExist(Integer patientId) { + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT patient_id as patientId from patient " + + "where patient_id= :patientId") + .addScalar("patientId", IntegerType.INSTANCE); + query.setParameter("patientId", patientId); + if(query.setResultTransformer(Transformers.aliasToBean(Patient.class)).list().size()==0){ + return false; + } + return true; + } } diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java index 2498f7ed..1e798d52 100644 --- a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java @@ -1,5 +1,7 @@ package org.bahmni.module.hip.model; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -7,6 +9,8 @@ @NoArgsConstructor @Setter @Getter +@Builder +@AllArgsConstructor public class PatientCareContext { private String careContextType; private String careContextName; diff --git a/omod/pom.xml b/omod/pom.xml index 81aaaa04..619dfe30 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -116,6 +116,14 @@ + org.apache.maven.pluginsmaven-compiler-plugin1111 + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java new file mode 100644 index 00000000..47755367 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java @@ -0,0 +1,31 @@ +package org.bahmni.module.hip.web.client; + +import org.bahmni.module.hip.web.client.model.ErrorCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.HashMap; +@Getter +@ToString +public class ClientError { + private static HashMap errorMap = new HashMap<>(); + private Integer code; + private String message; + + public ClientError(Integer code, String message) { + this.code = code; + this.message = message; + } + + public static ClientError invalidPatientId() { + return new ClientError(ErrorCode.BAD_REQUEST.getValue(), "Invalid patient id"); + } + + public static ClientError noPatientFound() { + return new ClientError(ErrorCode.PATIENT_ID_NOT_FOUND.getValue(), "No patient found"); + } + + public static ClientError noPatientIdProvided() { + return new ClientError(ErrorCode.NO_PATIENT_ID_SUPPLIED.getValue(), "No patient id supplied"); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/Error.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/Error.java new file mode 100644 index 00000000..6a716d64 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/Error.java @@ -0,0 +1,19 @@ +package org.bahmni.module.hip.web.client.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@JsonIgnoreProperties(ignoreUnknown = true) +@AllArgsConstructor +@Builder +@NoArgsConstructor +@Data +public class Error { + private ErrorCode code; + private String message; +} + + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java new file mode 100644 index 00000000..37ed7396 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java @@ -0,0 +1,33 @@ +package org.bahmni.module.hip.web.client.model; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonValue; + +import java.util.Arrays; + +public enum ErrorCode { + UNKNOWN_ERROR_OCCURRED(1500), + BAD_REQUEST(1501), + PATIENT_ID_NOT_FOUND(1502), + NO_PATIENT_ID_SUPPLIED (1503); + + private final int value; + + ErrorCode(int val) { + value = val; + } + + // Adding @JsonValue annotation that tells the 'value' to be of integer type while de-serializing. + @JsonValue + public int getValue() { + return value; + } + + @JsonCreator + public static ErrorCode getNameByValue(int value) { + return Arrays.stream(ErrorCode.values()) + .filter(errorCode -> errorCode.value == value) + .findAny() + .orElse(ErrorCode.UNKNOWN_ERROR_OCCURRED); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorRepresentation.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorRepresentation.java new file mode 100644 index 00000000..14bcf144 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorRepresentation.java @@ -0,0 +1,16 @@ +package org.bahmni.module.hip.web.client.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +@JsonIgnoreProperties(ignoreUnknown = true) +@AllArgsConstructor +@Builder +@NoArgsConstructor +@Data +public class ErrorRepresentation { + private Error error; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/RespError.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/RespError.java new file mode 100644 index 00000000..0b2ea3bd --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/RespError.java @@ -0,0 +1,19 @@ +package org.bahmni.module.hip.web.client.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; + +@JsonIgnoreProperties(ignoreUnknown = true) +@AllArgsConstructor +@Builder +@NoArgsConstructor +@Data +public class RespError implements Serializable { + private Integer code; + private String message; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java index 185119ee..7c42bc03 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java @@ -1,9 +1,10 @@ package org.bahmni.module.hip.web.controller; -import org.bahmni.module.hip.model.PatientCareContext; +import org.bahmni.module.hip.web.client.ClientError; import org.bahmni.module.hip.web.service.CareContextService; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,12 +13,11 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; -import java.util.List; - @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @RestController public class CareContextController { private final CareContextService careContextService; + @Autowired public CareContextController(CareContextService careContextService) { this.careContextService = careContextService; @@ -25,7 +25,20 @@ public CareContextController(CareContextService careContextService) { @RequestMapping(method = RequestMethod.GET, value = "/careContext", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity> getCareContextForPatient(@RequestParam String patientId){ - return ResponseEntity.ok(careContextService.careContextForPatient(patientId)); + ResponseEntity getCareContextForPatient(@RequestParam String patientId) { + if (patientId.equals("null") || patientId.equals("") || patientId.equals(" ")) { + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + } + + if (!careContextService.isValid(patientId)) { + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + } + + Object careContextForPatient = careContextService.careContextForPatient(Integer.parseInt(patientId)); + if (careContextForPatient.equals(false)) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ClientError.noPatientFound()); + } + + return ResponseEntity.ok(careContextForPatient); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java index 28aadd7d..68f81f18 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java @@ -34,4 +34,12 @@ public ErrorResponse genericException(Exception ex) { log.error(ex.getMessage(), ex); return new ErrorResponse(ex.getMessage()); } + + @ResponseBody + @ResponseStatus(HttpStatus.BAD_REQUEST) + @ExceptionHandler(NumberFormatException.class) + public ErrorResponse numberFormatException(Exception ex) { + log.error(ex.getMessage(), ex); + return new ErrorResponse(ex.getMessage()); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java index 84287670..f45491af 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import java.util.List; +import java.util.regex.Pattern; @Service public class CareContextService { @@ -30,8 +31,17 @@ CareContext careContextFor(Encounter emrEncounter, Class careContextType) { } } - public List careContextForPatient(String patientId){ - return careContextRepository.getPatientCareContext(patientId); + public Type careContextForPatient(Integer patientId){ + if(!careContextRepository.isPatientIdExist(patientId)){ + return (Type) Boolean.FALSE; + } + return (Type) careContextRepository.getPatientCareContext(patientId); } + public boolean isValid(String patientId){ + if (Pattern.matches("[0-9]{1,}", patientId)){ + return true; + } + return false; + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java index 34b389e6..d4eebb3a 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web; +import org.bahmni.module.hip.web.client.ClientError; import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.bahmni.module.hip.web.service.CareContextService; import org.bahmni.module.hip.web.service.PrescriptionService; diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java index 6d68b5ed..95c2ee51 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java @@ -1,8 +1,10 @@ package org.bahmni.module.hip.web.controller; +import org.bahmni.module.hip.model.PatientCareContext; import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.client.ClientError; import org.bahmni.module.hip.web.service.CareContextService; -import org.bahmni.module.hip.web.service.CareContextServiceTest; +import org.codehaus.jackson.map.ObjectMapper; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -13,12 +15,16 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; import org.springframework.test.web.servlet.setup.MockMvcBuilders; import org.springframework.web.context.WebApplicationContext; -import static java.util.Collections.EMPTY_LIST; -import static org.mockito.Matchers.any; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; @@ -44,12 +50,66 @@ public void setup() { @Test public void shouldReturn200OkWhenPatientIdIsGiven() throws Exception { - when(careContextService.careContextForPatient(anyString())) - .thenReturn(EMPTY_LIST); + List patientCareContextList=new ArrayList<>(); + patientCareContextList.add(PatientCareContext.builder() + .careContextName("TB Program") + .careContextType("PROGRAM") + .careContextReference(4) + .build()); + when(careContextService.isValid(anyString())).thenReturn(true); + when(careContextService.careContextForPatient(anyInt())) + .thenReturn(patientCareContextList); + mockMvc.perform(get(String.format("/rest/%s/hip/careContext", RestConstants.VERSION_1)) .param("patientId", "72") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } + + @Test + public void shouldReturn400BadRequestWhenPatientIdContainsCharacters() throws Exception { + List patientCareContextList=new ArrayList<>(); + patientCareContextList.add(PatientCareContext.builder() + .careContextName("TB Program") + .careContextType("PROGRAM") + .careContextReference(4) + .build()); + when(careContextService.isValid(anyString())).thenReturn(false); + when(careContextService.careContextForPatient(anyInt())) + .thenReturn(patientCareContextList); + + + MvcResult mvcResult=mockMvc.perform(get(String.format("/rest/%s/hip/careContext", RestConstants.VERSION_1)) + .param("patientId", "72aa") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + String responseBody = new ObjectMapper().writeValueAsString(ClientError.invalidPatientId()); + assertEquals(responseBody, content); + } + + @Test + public void shouldReturn400BadRequestWhenNoPatientIdProvided() throws Exception { + List patientCareContextList=new ArrayList<>(); + patientCareContextList.add(PatientCareContext.builder() + .careContextName("TB Program") + .careContextType("PROGRAM") + .careContextReference(4) + .build()); + when(careContextService.isValid(anyString())).thenReturn(true); + when(careContextService.careContextForPatient(anyInt())) + .thenReturn(patientCareContextList); + + + MvcResult mvcResult=mockMvc.perform(get(String.format("/rest/%s/hip/careContext", RestConstants.VERSION_1)) + .param("patientId", "") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + String responseBody = new ObjectMapper().writeValueAsString(ClientError.noPatientIdProvided()); + assertEquals(responseBody, content); + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java index 41794d14..693851b8 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java @@ -19,11 +19,13 @@ public class CareContextServiceTest { @Test public void shouldFetchAllCareContextForPatient() { - String patientId = "0f90531a-285c-438b-b265-bb3abb4745bd"; + Integer patientId = 70; List careContexts = new ArrayList<>(); when(careContextRepository.getPatientCareContext(patientId)) .thenReturn(careContexts); + when(careContextRepository.isPatientIdExist(patientId)) + .thenReturn(true); careContextServiceObject.careContextForPatient(patientId); From 5444d8dd08944adc35ca707dd910cab1df4211a0 Mon Sep 17 00:00:00 2001 From: praveenadayanand <56681033+praveenadayanand@users.noreply.github.com> Date: Tue, 27 Oct 2020 10:52:48 +0530 Subject: [PATCH 062/264] Create build_and_deploy.yml Build CI --- .github/workflows/build_and_deploy.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/build_and_deploy.yml diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml new file mode 100644 index 00000000..a50e1b6f --- /dev/null +++ b/.github/workflows/build_and_deploy.yml @@ -0,0 +1,20 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: [workflow_dispatch] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 1.8 + uses: actions/setup-java@v1 + with: + java-version: 1.8 + - name: Build with Maven + run: mvn clean install From 51b2d599899541babc99ab30db20ba42f44ad78b Mon Sep 17 00:00:00 2001 From: praveenadayanand <56681033+praveenadayanand@users.noreply.github.com> Date: Tue, 27 Oct 2020 11:01:57 +0530 Subject: [PATCH 063/264] Update build_and_deploy.yml --- .github/workflows/build_and_deploy.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index a50e1b6f..fadad76f 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -16,5 +16,16 @@ jobs: uses: actions/setup-java@v1 with: java-version: 1.8 + - name: Cache Maven packages + uses: actions/cache@v2 + with: + path: ~/.m2 + key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} + restore-keys: ${{ runner.os }}-m2- - name: Build with Maven run: mvn clean install + - run: mkdir staging && cp target/*.omod staging + - uses: actions/upload-artifact@v2 + with: + name: Package + path: staging From 306d3c9667ff0c22aa1893cdf049cc07df9c819f Mon Sep 17 00:00:00 2001 From: praveenadayanand <56681033+praveenadayanand@users.noreply.github.com> Date: Tue, 27 Oct 2020 11:09:45 +0530 Subject: [PATCH 064/264] Update build_and_deploy.yml Copy omod to staging --- .github/workflows/build_and_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index fadad76f..aaf8c1ad 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -24,7 +24,7 @@ jobs: restore-keys: ${{ runner.os }}-m2- - name: Build with Maven run: mvn clean install - - run: mkdir staging && cp target/*.omod staging + - run: mkdir staging && cp omod/target/*.omod staging - uses: actions/upload-artifact@v2 with: name: Package From 8538e97ceb8503b97612c7a2eda146ae265fd05a Mon Sep 17 00:00:00 2001 From: Praveena Dayanand Date: Tue, 1 Dec 2020 14:14:07 +0530 Subject: [PATCH 065/264] Praveena | Set FHIR2 dependency version --- omod/pom.xml | 2 +- .../module/hip/web/model/serializers/FhirBundleSerializer.java | 2 +- omod/src/main/resources/config.xml | 2 +- pom.xml | 2 ++ 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 14006fb1..4d6ae560 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -34,7 +34,7 @@ org.openmrs.module fhir2-omod - 1.0.0-SNAPSHOT + 1.0.0-20200925.143534-163 provided diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java index 4a3cfe8d..a4f08608 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/FhirBundleSerializer.java @@ -13,6 +13,6 @@ public class FhirBundleSerializer extends JsonSerializer { @Override public void serialize(Bundle bundle, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException { - jsonGenerator.writeRaw(serializeBundle(bundle)); + jsonGenerator.writeRaw(":" + serializeBundle(bundle)); } } diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 1ffaae92..5ed3cb59 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,7 +22,7 @@ org.openmrs.module.webservices.rest - org.openmrs.module.fhir2 + org.openmrs.module.fhir2 - bahmniHip.healthFacilityRegistryId diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index b1ea22f1..0e1be591 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -28,4 +28,8 @@ + + + + From 57b9d5d187e894aa3c1ee4176cc3d34fdaf01368 Mon Sep 17 00:00:00 2001 From: Praveena Dayanand Date: Tue, 30 Mar 2021 12:17:52 +0530 Subject: [PATCH 081/264] 149 | Praveena - Make labresults viewable on HIU application --- .../bahmni/module/hip/web/model/FhirLabResult.java | 12 ++++++++++-- .../module/hip/web/model/OpenMrsLabResults.java | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index cd33eceb..5b1cc958 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -13,12 +13,14 @@ import org.hl7.fhir.r4.model.Quantity; import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.StringType; +import org.hl7.fhir.r4.model.Practitioner; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; public class FhirLabResult { @@ -27,13 +29,15 @@ public class FhirLabResult { private final Date encounterTime; private final DiagnosticReport report; private final List results; + private final List practitioners; - public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date encounterTime, DiagnosticReport report, List results) { + public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date encounterTime, DiagnosticReport report, List results, List practitioners) { this.patient = patient; this.encounter = encounter; this.encounterTime = encounterTime; this.report = report; this.results = results; + this.practitioners = practitioners; } public Bundle bundleLabResults (String webUrl, FHIRResourceMapper fhirResourceMapper) { @@ -43,6 +47,8 @@ public Bundle bundleLabResults (String webUrl, FHIRResourceMapper fhirResourceMa FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); + FHIRUtils.addToBundleEntry(bundle, encounter, false); + FHIRUtils.addToBundleEntry(bundle, practitioners, false); FHIRUtils.addToBundleEntry(bundle, patient, false); FHIRUtils.addToBundleEntry(bundle, report, false); FHIRUtils.addToBundleEntry(bundle, results, false); @@ -52,6 +58,7 @@ public Bundle bundleLabResults (String webUrl, FHIRResourceMapper fhirResourceMa public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, FHIRResourceMapper fhirResourceMapper) { Patient patient = fhirResourceMapper.mapToPatient(labresult.getPatient()); + List practitioners = labresult.getEncounterProviders().stream().map(fhirResourceMapper::mapToPractitioner).collect(Collectors.toList()); DiagnosticReport reports = new DiagnosticReport(); LabOrderResult firstresult = labresult.getLabOrderResults().get(0); @@ -60,6 +67,7 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F reports.setCode(new CodeableConcept().setText(firstresult.getPanelName()).addCoding(new Coding().setDisplay(firstresult.getPanelName()))); reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); reports.setSubject(FHIRUtils.getReferenceToResource(patient)); + reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); List results = new ArrayList<>(); @@ -67,7 +75,7 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), labresult.getLabOrderResults().get(0).getPanelName(), fhirResourceMapper.mapToEncounter( labresult.getEncounter() ), - labresult.getEncounter().getEncounterDatetime(), reports, results); + labresult.getEncounter().getEncounterDatetime(), reports, results, practitioners); return fhirLabResult; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java index b68828b9..9d3163d6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java @@ -19,11 +19,14 @@ public class OpenMrsLabResults { private Encounter encounter; private List labOrderResults; private Patient patient; + private final Set encounterProviders; + public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults) { this.encounter = encounter; this.patient = patient; this.labOrderResults = labOrderResults; + this.encounterProviders = encounter.getEncounterProviders(); } From 3ea19a7095ed2f00f12d0c39afb7385b174d95f6 Mon Sep 17 00:00:00 2001 From: swatigogia2020 <73937345+swatigogia2020@users.noreply.github.com> Date: Tue, 27 Apr 2021 17:37:16 +0530 Subject: [PATCH 082/264] Healthid identifier (#17) * Swati: Adding healthid as extra identifier * Swati: correcting the query * Swati: Making the identifier unique and not using location behaviour --- api/src/main/resources/liquibase.xml | 29 +++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 0fa49c63..e1e47312 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -1,9 +1,9 @@ - - + + + + + select count(*) from patient_identifier_type where name='Health ID' + + Adding Health Id Identifier type + + insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior) Select 'Health ID','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED' from users where username='admin'; + + + + + + select count(*) from patient_identifier_type where name='Health ID' + + Adding Health Id Identifier type + + update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'Health ID') where property = 'bahmni.extraPatientIdentifierTypes'; + + \ No newline at end of file From e49849155187ab251d17f5948b167f70500706cb Mon Sep 17 00:00:00 2001 From: swatigogia2020 <73937345+swatigogia2020@users.noreply.github.com> Date: Tue, 27 Apr 2021 19:10:37 +0530 Subject: [PATCH 083/264] Healthid identifier (#18) * Swati: Adding healthid as extra identifier * Swati: correcting the query * Swati: Making the identifier unique and not using location behaviour * Swati|Praveena: correcting the liquibase query --- api/src/main/resources/liquibase.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index e1e47312..de1abb40 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -42,7 +42,7 @@ Adding Health Id Identifier type - insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior) Select 'Health ID','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED' from users where username='admin'; + insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'Health ID','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; @@ -55,5 +55,5 @@ update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'Health ID') where property = 'bahmni.extraPatientIdentifierTypes'; - + \ No newline at end of file From 78e1530c609ed540665ccaae650f385f500ddcfd Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 11 May 2021 16:54:26 +0530 Subject: [PATCH 084/264] 146| API endpoint for fetching patients based on the fuzzy logic. (#16) * 146|Nazeer/SreeRanjani adds API endpoint for fetching patient demographic details * 146|Nazeer/SreeRanjani refactors ExistingPatientService * 146 | Adds authorization to patient controller * 146|Nazeer/Sree Ranjani|Refactors displaying the yearOfBirth and Address line in the response * 146|Sree Ranjani/Nazeer |Refactors ExistingPatientService * 146|Sree Ranjani/Nazeer| Adds matching the family name short form * 146|Sree Ranjnai/Nazeer | Removes api authencation of existing patients end point * 146|Sree Ranjani/Nazeer|Adds existingPatient model and removed JSON dependency Co-authored-by: Sree Ranjani M Co-authored-by: meghna Co-authored-by: System Administrator --- omod/pom.xml | 1 - .../hip/web/controller/PatientController.java | 51 ++++++++++ .../module/hip/web/model/ExistingPatient.java | 17 ++++ .../web/service/ExistingPatientService.java | 94 ++++++++++++++++++ .../module/hip/web/TestConfiguration.java | 6 ++ .../web/controller/PatientControllerTest.java | 96 +++++++++++++++++++ 6 files changed, 264 insertions(+), 1 deletion(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java diff --git a/omod/pom.xml b/omod/pom.xml index 820e9e16..68b3c44b 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -115,7 +115,6 @@ 2.3.0 test - diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java new file mode 100644 index 00000000..135934d4 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -0,0 +1,51 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.client.model.Error; +import org.bahmni.module.hip.web.client.model.ErrorCode; +import org.bahmni.module.hip.web.client.model.ErrorRepresentation; +import org.bahmni.module.hip.web.model.ExistingPatient; +import org.bahmni.module.hip.web.service.ExistingPatientService; +import org.openmrs.Patient; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") +@RestController +public class PatientController { + private final ExistingPatientService existingPatientService; + + @Autowired + public PatientController(ExistingPatientService existingPatientService) { + this.existingPatientService = existingPatientService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/existingPatients", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity getExistingPatients(@RequestParam(required = false) String patientName, + @RequestParam String patientYearOfBirth, + @RequestParam String patientGender) { + + List matchingPatients = existingPatientService.getMatchingPatients(patientName, + Integer.parseInt(patientYearOfBirth), patientGender); + + if (matchingPatients.size() != 1) + return ResponseEntity.ok().body(new ErrorRepresentation(new Error( + ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + else { + ExistingPatient existingPatients = existingPatientService.getMatchingPatientDetails(matchingPatients); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(existingPatients); + } + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java new file mode 100644 index 00000000..6430db00 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java @@ -0,0 +1,17 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Builder +@Getter +@Setter +@AllArgsConstructor +public class ExistingPatient { + String name; + String yearOfBirth; + String address; + String gender; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java new file mode 100644 index 00000000..070400a6 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -0,0 +1,94 @@ +package org.bahmni.module.hip.web.service; + +import org.apache.commons.lang.StringUtils; +import org.bahmni.module.hip.web.model.ExistingPatient; +import org.openmrs.Patient; +import org.openmrs.api.PatientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.List; + +@Service +public class ExistingPatientService { + private final PatientService patientService; + static final int MATCHING_CRITERIA_CONSTANT = 2; + + @Autowired + public ExistingPatientService(PatientService patientService) { + this.patientService = patientService; + } + + public List getMatchingPatients(String patientName, int patientYearOfBirth, + String patientGender) { + return getPatients(patientName, patientYearOfBirth, patientGender); + } + + private List getPatients(String patientName, int patientYearOfBirth, String patientGender) { + List patientsMatchedWithName = filterPatientsByName(patientName); + if (patientsMatchedWithName.size() != 1) { + List patientsMatchedWithNameAndAge = filterPatientsByAge(patientYearOfBirth, patientsMatchedWithName); + if (patientsMatchedWithNameAndAge.size() != 1) + return filterPatientsByGender(patientGender, patientsMatchedWithNameAndAge); + return patientsMatchedWithNameAndAge; + } + return patientsMatchedWithName; + } + + private List filterPatientsByName(String patientName) { + List existingPatients = patientService.getAllPatients(); + List patients = new ArrayList<>(); + for (Patient patient : existingPatients) { + String givenName = patientName.split(" ")[0].toLowerCase(); + String familyName = patientName.split(" ")[1].toLowerCase(); + int distanceOfGivenName = StringUtils.getLevenshteinDistance(givenName, patient.getGivenName().toLowerCase()); + int distanceOfFamilyName = StringUtils.getLevenshteinDistance(familyName, patient.getFamilyName().toLowerCase()); + if (distanceOfGivenName <= MATCHING_CRITERIA_CONSTANT + && (distanceOfFamilyName <= MATCHING_CRITERIA_CONSTANT + || patient.getFamilyName().charAt(0) == patientName.split(" ")[1].charAt(0))) + patients.add(patient); + } + return patients; + } + + private List filterPatientsByAge(int patientYearOfBirth, List patientsMatchedWithNameAndGender) { + List patients = new ArrayList<>(); + for (Patient patient : patientsMatchedWithNameAndGender) { + if (verifyYearOfBirth(getYearOfBirth(patient.getAge()), patientYearOfBirth)) { + patients.add(patient); + } + } + return patients; + } + + private Integer getYearOfBirth(int age) { + return Calendar.getInstance().get(Calendar.YEAR) - age; + } + + private boolean verifyYearOfBirth(int yearOfBirth, int patientYearOfBirth) { + return yearOfBirth == patientYearOfBirth || Math.abs(yearOfBirth - patientYearOfBirth) <= MATCHING_CRITERIA_CONSTANT; + } + + private List filterPatientsByGender(String patientGender, List patientMatchedWithName) { + List patients = new ArrayList<>(); + for (Patient patient : patientMatchedWithName) { + if (patient.getGender().equals(patientGender)) + patients.add(patient); + } + return patients; + } + + public ExistingPatient getMatchingPatientDetails(List matchingPatients) { + Patient patient = matchingPatients.get(0); + ExistingPatient existingPatient = new ExistingPatient(patient.getGivenName() + " " + patient.getFamilyName(), + getYearOfBirth(patient.getAge()).toString(), + patient.getPersonAddress().getAddress1() + + "," + patient.getPersonAddress().getCountyDistrict() + + "," + patient.getPersonAddress().getStateProvince(), + patient.getGender()); + + return existingPatient; + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java index f033aa18..22bf2d8d 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -3,6 +3,7 @@ import org.bahmni.module.hip.web.service.BundleMedicationRequestService; import org.bahmni.module.hip.web.service.CareContextService; import org.bahmni.module.hip.web.service.DiagnosticReportService; +import org.bahmni.module.hip.web.service.ExistingPatientService; import org.bahmni.module.hip.web.service.PrescriptionService; import org.bahmni.module.hip.web.service.ValidationService; import org.springframework.context.annotation.Bean; @@ -38,4 +39,9 @@ public ValidationService validationService() { public DiagnosticReportService diagnosticReportService() { return mock(DiagnosticReportService.class); } + + @Bean + public ExistingPatientService existingPatientService() { + return mock(ExistingPatientService.class); + } } \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java new file mode 100644 index 00000000..f994e2db --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -0,0 +1,96 @@ +package org.bahmni.module.hip.web.controller; + +import com.fasterxml.jackson.databind.ObjectMapper; +import junit.framework.TestCase; +import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.client.model.Error; +import org.bahmni.module.hip.web.client.model.ErrorCode; +import org.bahmni.module.hip.web.client.model.ErrorRepresentation; +import org.bahmni.module.hip.web.model.ExistingPatient; +import org.bahmni.module.hip.web.service.ExistingPatientService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.Patient; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {PatientController.class, TestConfiguration.class}) +@WebAppConfiguration +public class PatientControllerTest extends TestCase { + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private ExistingPatientService existingPatientService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { + Patient patient = mock(Patient.class); + List patients = new ArrayList<>(); + patients.add(patient); + + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); + when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) + .thenReturn(patients); + when(existingPatientService.getMatchingPatientDetails(patients)) + .thenReturn(existingPatient); + + mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients", RestConstants.VERSION_1)) + .param("patientName", "sam tom") + .param("patientYearOfBirth", "1985") + .param("patientGender", "M") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + public void shouldReturnNoRecordsWhenNoMatchingPatientFound() throws Exception { + List patients = new ArrayList<>(); + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); + + when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) + .thenReturn(patients); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients", RestConstants.VERSION_1)) + .param("patientName", "sam tom") + .param("patientYearOfBirth", "1985") + .param("patientGender", "M") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + ObjectMapper objectMapper = new ObjectMapper(); + String value = objectMapper.writeValueAsString(new ErrorRepresentation + (new Error(ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + assertEquals(value, + mvcResult.getResponse().getContentAsString()); + } +} \ No newline at end of file From 352ef57ef12cb0ee01bb417c7ad3aaef5ff7ae69 Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Tue, 18 May 2021 17:02:03 +0530 Subject: [PATCH 085/264] 181-Mahesh adds dao layer to fetch patient with healthId if exists --- .../bahmni/module/hip/api/dao/PatientDao.java | 7 ++++ .../hip/api/dao/impl/PatientDaoImpl.java | 32 +++++++++++++++++++ 2 files changed, 39 insertions(+) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java new file mode 100644 index 00000000..22f53246 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java @@ -0,0 +1,7 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Patient; + +public interface PatientDao { + String getPatientUuidWithHealthId(String healthId); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java new file mode 100644 index 00000000..c18f92f9 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java @@ -0,0 +1,32 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.PatientDao; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.openmrs.Patient; +import org.springframework.beans.factory.annotation.Autowired; + +import java.util.List; + +public class PatientDaoImpl implements PatientDao { + + public static final int HEALTH_ID_IDENTIFIER_TYPE_ID = 5; + + private SessionFactory sessionFactory; + + @Autowired + public PatientDaoImpl(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + @Override + public String getPatientUuidWithHealthId(String healthId) { + String getPatientWithHealthIdQuery = "SELECT p.uuid FROM person as p INNER JOIN \n" + + "\t\t\t\t patient_identifier as pi on p.person_id = pi.patient_id \n" + + "\t\t\t\t WHERE pi.identifier_type=" + HEALTH_ID_IDENTIFIER_TYPE_ID + "and identifier=:healthId;"; + Query query = this.sessionFactory.openSession().createSQLQuery(getPatientWithHealthIdQuery); + query.setParameter("healthId", healthId); + List patientUuids = query.list(); + return patientUuids.size() > 0 ? patientUuids.get(0) : null; + } +} From 0c2b691eff38b1ed2c09e3c2183d0103adc1673e Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Wed, 19 May 2021 11:14:17 +0530 Subject: [PATCH 086/264] 181-Mahesh Adds API end point for fetching patient with health id --- ...atientDao.java => ExistingPatientDao.java} | 4 +--- ...oImpl.java => ExistingPatientDaoImpl.java} | 15 ++++++------ .../hip/web/controller/PatientController.java | 17 +++++++++++++- .../web/service/ExistingPatientService.java | 9 +++++++- .../web/controller/PatientControllerTest.java | 23 +++++++++++++++++++ 5 files changed, 56 insertions(+), 12 deletions(-) rename api/src/main/java/org/bahmni/module/hip/api/dao/{PatientDao.java => ExistingPatientDao.java} (62%) rename api/src/main/java/org/bahmni/module/hip/api/dao/impl/{PatientDaoImpl.java => ExistingPatientDaoImpl.java} (63%) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java similarity index 62% rename from api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java rename to api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index 22f53246..702f931d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.api.dao; -import org.openmrs.Patient; - -public interface PatientDao { +public interface ExistingPatientDao { String getPatientUuidWithHealthId(String healthId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java similarity index 63% rename from api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java rename to api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index c18f92f9..a6d60e5d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -1,29 +1,30 @@ package org.bahmni.module.hip.api.dao.impl; -import org.bahmni.module.hip.api.dao.PatientDao; +import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.hibernate.Query; import org.hibernate.SessionFactory; -import org.openmrs.Patient; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; import java.util.List; -public class PatientDaoImpl implements PatientDao { +@Repository +public class ExistingPatientDaoImpl implements ExistingPatientDao { public static final int HEALTH_ID_IDENTIFIER_TYPE_ID = 5; private SessionFactory sessionFactory; @Autowired - public PatientDaoImpl(SessionFactory sessionFactory) { + public ExistingPatientDaoImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public String getPatientUuidWithHealthId(String healthId) { - String getPatientWithHealthIdQuery = "SELECT p.uuid FROM person as p INNER JOIN \n" + - "\t\t\t\t patient_identifier as pi on p.person_id = pi.patient_id \n" + - "\t\t\t\t WHERE pi.identifier_type=" + HEALTH_ID_IDENTIFIER_TYPE_ID + "and identifier=:healthId;"; + String getPatientWithHealthIdQuery = "SELECT p.uuid FROM person AS p INNER JOIN \n" + + "\t\t\t\t patient_identifier AS pi ON p.person_id = pi.patient_id \n" + + "\t\t\t\t WHERE pi.identifier_type = " + HEALTH_ID_IDENTIFIER_TYPE_ID + " AND identifier = :healthId ;"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientWithHealthIdQuery); query.setParameter("healthId", healthId); List patientUuids = query.list(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 135934d4..d35903cf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -13,9 +13,10 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.PathVariable; import java.util.List; @@ -48,4 +49,18 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat .body(existingPatients); } } + + @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/{healthId}") + @ResponseBody + public ResponseEntity getExistingPatientsWithHealthId(@PathVariable String healthId) { + String patientUuid = existingPatientService.getPatientWithHealthId(healthId); + if (patientUuid != null) { + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(patientUuid); + } else { + return ResponseEntity.ok() + .body(new ErrorRepresentation(new Error(ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + } + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 070400a6..24ccbb2c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.apache.commons.lang.StringUtils; +import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.bahmni.module.hip.web.model.ExistingPatient; import org.openmrs.Patient; import org.openmrs.api.PatientService; @@ -14,11 +15,13 @@ @Service public class ExistingPatientService { private final PatientService patientService; + private final ExistingPatientDao existingPatientDao; static final int MATCHING_CRITERIA_CONSTANT = 2; @Autowired - public ExistingPatientService(PatientService patientService) { + public ExistingPatientService(PatientService patientService, ExistingPatientDao existingPatientDao) { this.patientService = patientService; + this.existingPatientDao = existingPatientDao; } public List getMatchingPatients(String patientName, int patientYearOfBirth, @@ -91,4 +94,8 @@ public ExistingPatient getMatchingPatientDetails(List matchingPatients) return existingPatient; } + + public String getPatientWithHealthId(String healthId) { + return existingPatientDao.getPatientUuidWithHealthId(healthId); + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index f994e2db..f831a126 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -93,4 +93,27 @@ public void shouldReturnNoRecordsWhenNoMatchingPatientFound() throws Exception { assertEquals(value, mvcResult.getResponse().getContentAsString()); } + + @Test + public void shouldReturnPatientUuidWhenTheHealthIdIsLinkedToAPatient() throws Exception { + when(existingPatientService.getPatientWithHealthId("abc.xyz@sbx")).thenReturn("bd27cbfd-b395-4a8a-af71-b27535b85e31"); + mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/" + "abc.xyz@sbx", RestConstants.VERSION_1)) + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + public void shouldReturnNoPatientFoundAsResponseWhenTheHealthIdIsNotLinkedToAnyPatient() throws Exception { + when(existingPatientService.getPatientWithHealthId("def.xyz@sbx")).thenReturn(null); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/" + "def.xyz@sbx", RestConstants.VERSION_1)) + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + ObjectMapper objectMapper = new ObjectMapper(); + String value = objectMapper.writeValueAsString(new ErrorRepresentation + (new Error(ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + assertEquals(value, + mvcResult.getResponse().getContentAsString()); + } } \ No newline at end of file From 97cab25494438f286e18b3d1fccdd2ff1c06860a Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Thu, 20 May 2021 10:48:36 +0530 Subject: [PATCH 087/264] 202|Nazeer/Sree Ranjani| Fixes building error of maven (#19) * 202|Nazeer/Sree Ranjani| Fixes building error of maven * 202|Nazeer/Sree Ranjani| Fixes changed the http to htpps for amazonaws --- omod/pom.xml | 4 ++-- pom.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 68b3c44b..4fe415bd 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -15,7 +15,7 @@ repo.mybahmni.org bahmni-artifactory-snapshots - http://repo.mybahmni.org.s3.amazonaws.com/artifactory/snapshot + https://repo.mybahmni.org.s3.amazonaws.com/artifactory/snapshot always @@ -23,7 +23,7 @@ repo.mybahmni.org-release bahmni-artifactory-release - http://repo.mybahmni.org.s3.amazonaws.com/artifactory/release + https://repo.mybahmni.org.s3.amazonaws.com/artifactory/release diff --git a/pom.xml b/pom.xml index 72130f46..02594fbf 100644 --- a/pom.xml +++ b/pom.xml @@ -139,7 +139,7 @@ openmrs-repo OpenMRS Nexus Repository - http://mavenrepo.openmrs.org/nexus/content/repositories/public + https://mavenrepo.openmrs.org/nexus/content/repositories/public @@ -147,7 +147,7 @@ openmrs-repo OpenMRS Nexus Repository - http://mavenrepo.openmrs.org/nexus/content/repositories/public + https://mavenrepo.openmrs.org/nexus/content/repositories/public false From ebb6eae96ea4c81f6f67c2f480ecfbb4020b6498 Mon Sep 17 00:00:00 2001 From: System Administrator Date: Fri, 21 May 2021 16:42:30 +0530 Subject: [PATCH 088/264] 182|Sree Ranjani/Nazeer| Adds get the existing patients using the phone number --- .../bahmni/module/hip/api/dao/PatientDao.java | 5 +++ .../hip/api/dao/impl/PatientDaoIml.java | 34 +++++++++++++++++++ .../hip/web/controller/PatientController.java | 5 +-- .../web/service/ExistingPatientService.java | 27 +++++++++++++-- .../web/controller/PatientControllerTest.java | 6 ++-- 5 files changed, 71 insertions(+), 6 deletions(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoIml.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java new file mode 100644 index 00000000..1c7f62e4 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PatientDao.java @@ -0,0 +1,5 @@ +package org.bahmni.module.hip.api.dao; + +public interface PatientDao { + String getPhoneNumber(Integer patientId); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoIml.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoIml.java new file mode 100644 index 00000000..bd03210b --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PatientDaoIml.java @@ -0,0 +1,34 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.PatientDao; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; + +@Repository +public class PatientDaoIml implements PatientDao { + + + private final SessionFactory sessionFactory; + private static final int PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID = 15; + + @Autowired + public PatientDaoIml(SessionFactory sessionFactory) { + this.sessionFactory = sessionFactory; + } + + @Override + public String getPhoneNumber(Integer patientId) { + String getPatientPhoneNumberWithPatientIdQuery = + "select value from person_attribute where person_id=:patientId and person_attribute_type_id=" + + PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID + ";"; + Query query = this.sessionFactory.openSession().createSQLQuery(getPatientPhoneNumberWithPatientIdQuery); + query.setParameter("patientId", patientId); + List phoneNumbers = query.list(); + return phoneNumbers.size() > 0 ? phoneNumbers.get(0) : null; + } +} + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 135934d4..2b22c363 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -33,10 +33,11 @@ public PatientController(ExistingPatientService existingPatientService) { public @ResponseBody ResponseEntity getExistingPatients(@RequestParam(required = false) String patientName, @RequestParam String patientYearOfBirth, - @RequestParam String patientGender) { + @RequestParam String patientGender, + @RequestParam String phoneNumber) { List matchingPatients = existingPatientService.getMatchingPatients(patientName, - Integer.parseInt(patientYearOfBirth), patientGender); + Integer.parseInt(patientYearOfBirth), patientGender, phoneNumber); if (matchingPatients.size() != 1) return ResponseEntity.ok().body(new ErrorRepresentation(new Error( diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 070400a6..b5ded566 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.apache.commons.lang.StringUtils; +import org.bahmni.module.hip.api.dao.PatientDao; import org.bahmni.module.hip.web.model.ExistingPatient; import org.openmrs.Patient; import org.openmrs.api.PatientService; @@ -14,18 +15,40 @@ @Service public class ExistingPatientService { private final PatientService patientService; + private final PatientDao patientDao; static final int MATCHING_CRITERIA_CONSTANT = 2; @Autowired - public ExistingPatientService(PatientService patientService) { + public ExistingPatientService(PatientService patientService, PatientDao patientDao) { this.patientService = patientService; + this.patientDao = patientDao; } public List getMatchingPatients(String patientName, int patientYearOfBirth, - String patientGender) { + String patientGender, String phoneNumber) { + List existingPatients = getPatientsByPhoneNumber(phoneNumber); + if (existingPatients.size() == 1) { + return existingPatients; + } return getPatients(patientName, patientYearOfBirth, patientGender); } + private List getPatientsByPhoneNumber(String phoneNumber) { + List existingPatients = new ArrayList<>(); + List patients = patientService.getAllPatients(); + for (Patient patient : patients) { + Integer patientId = patient.getId(); + String patientPhoneNumber = patientDao.getPhoneNumber(patientId); + if (patientPhoneNumber != null) { + patientPhoneNumber = patientPhoneNumber.replace("+91-", ""); + if (phoneNumber.equals(patientPhoneNumber)) { + existingPatients.add(patient); + } + } + } + return existingPatients; + } + private List getPatients(String patientName, int patientYearOfBirth, String patientGender) { List patientsMatchedWithName = filterPatientsByName(patientName); if (patientsMatchedWithName.size() != 1) { diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index f994e2db..4ca53aa2 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -59,7 +59,7 @@ public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { patients.add(patient); ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); - when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) + when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString(), anyString())) .thenReturn(patients); when(existingPatientService.getMatchingPatientDetails(patients)) .thenReturn(existingPatient); @@ -68,6 +68,7 @@ public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { .param("patientName", "sam tom") .param("patientYearOfBirth", "1985") .param("patientGender", "M") + .param("phoneNumber", "+91-9876543210") .accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()); } @@ -77,13 +78,14 @@ public void shouldReturnNoRecordsWhenNoMatchingPatientFound() throws Exception { List patients = new ArrayList<>(); ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); - when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) + when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString(), anyString())) .thenReturn(patients); MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients", RestConstants.VERSION_1)) .param("patientName", "sam tom") .param("patientYearOfBirth", "1985") .param("patientGender", "M") + .param("phoneNumber", "+91-9876543210") .accept(MediaType.APPLICATION_JSON)) .andReturn(); From abeb92f6836dcbfb6edbc6873caafa98cd7c9ddc Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Mon, 24 May 2021 16:30:48 +0530 Subject: [PATCH 089/264] 181-Mahesh Removes the constant health_id_identifier_type_id --- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index a6d60e5d..87fabd90 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -11,8 +11,6 @@ @Repository public class ExistingPatientDaoImpl implements ExistingPatientDao { - public static final int HEALTH_ID_IDENTIFIER_TYPE_ID = 5; - private SessionFactory sessionFactory; @Autowired @@ -24,7 +22,7 @@ public ExistingPatientDaoImpl(SessionFactory sessionFactory) { public String getPatientUuidWithHealthId(String healthId) { String getPatientWithHealthIdQuery = "SELECT p.uuid FROM person AS p INNER JOIN \n" + "\t\t\t\t patient_identifier AS pi ON p.person_id = pi.patient_id \n" + - "\t\t\t\t WHERE pi.identifier_type = " + HEALTH_ID_IDENTIFIER_TYPE_ID + " AND identifier = :healthId ;"; + "\t\t\t\t WHERE identifier = :healthId ;"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientWithHealthIdQuery); query.setParameter("healthId", healthId); List patientUuids = query.list(); From 36369bf00ff59ccda98494a79991e0c333772e8b Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Mon, 31 May 2021 10:35:18 +0530 Subject: [PATCH 090/264] 182-Mahesh|Nazeer Refactors Removes code smells --- .../module/hip/api/dao/ExistingPatientDao.java | 1 - .../hip/api/dao/impl/ExistingPatientDaoImpl.java | 12 ------------ .../module/hip/web/controller/PatientController.java | 4 +--- 3 files changed, 1 insertion(+), 16 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index c853abb2..d8edc659 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -5,7 +5,6 @@ import java.util.List; public interface ExistingPatientDao { - String getPhoneNumber(Integer patientId); String getPatientUuidWithHealthId(String healthId); List getPatientsWithPhoneNumber(String phoneNumber); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index 64d1dbf9..e7b5c729 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -15,7 +15,6 @@ public class ExistingPatientDaoImpl implements ExistingPatientDao { private final SessionFactory sessionFactory; - private static final int PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID = 15; @Autowired public ExistingPatientDaoImpl(SessionFactory sessionFactory) { @@ -33,17 +32,6 @@ public String getPatientUuidWithHealthId(String healthId) { return patientUuids.size() > 0 ? patientUuids.get(0) : null; } - @Override - public String getPhoneNumber(Integer patientId) { - String getPatientPhoneNumberWithPatientIdQuery = - "select value from person_attribute where person_id=:patientId and person_attribute_type_id=" - + PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID + ";"; - Query query = this.sessionFactory.openSession().createSQLQuery(getPatientPhoneNumberWithPatientIdQuery); - query.setParameter("patientId", patientId); - List phoneNumbers = query.list(); - return phoneNumbers.size() > 0 ? phoneNumbers.get(0) : null; - } - @Override public List getPatientsWithPhoneNumber(String phoneNumber) { Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Patient.class); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 24daaca0..81744855 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -17,8 +17,6 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; - -import java.io.UnsupportedEncodingException; import java.util.List; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @@ -36,7 +34,7 @@ public PatientController(ExistingPatientService existingPatientService) { ResponseEntity getExistingPatients(@RequestParam(required = false) String patientName, @RequestParam String patientYearOfBirth, @RequestParam String patientGender, - @RequestParam String phoneNumber) throws UnsupportedEncodingException { + @RequestParam String phoneNumber) { List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber); if (matchingPatients.size() == 0) { matchingPatients = existingPatientService.getMatchingPatients(patientName, From 9ad8964e27c89ce8eb6beb3f0bcbd27f9abee261 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Mon, 31 May 2021 15:19:30 +0530 Subject: [PATCH 091/264] Update build_and_deploy.yml --- .github/workflows/build_and_deploy.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index aaf8c1ad..cae76145 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -3,7 +3,11 @@ name: Java CI with Maven -on: [workflow_dispatch] +on: + push: + branches: + - main + workflow_dispatch: jobs: build: From 0a0653b72a0aac2b0d0f32d0b7fd8612a6d990f9 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Mon, 31 May 2021 15:20:10 +0530 Subject: [PATCH 092/264] Update build_and_deploy.yml --- .github/workflows/build_and_deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index cae76145..ea466403 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -6,7 +6,7 @@ name: Java CI with Maven on: push: branches: - - main + - master workflow_dispatch: jobs: From ef181e5687363ae74878acd14e0d066a2e3e5ce7 Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Mon, 31 May 2021 16:59:39 +0530 Subject: [PATCH 093/264] 182-Mahesh Adds patient uuid in the response --- .../java/org/bahmni/module/hip/web/model/ExistingPatient.java | 1 + .../bahmni/module/hip/web/service/ExistingPatientService.java | 2 +- .../module/hip/web/controller/PatientControllerTest.java | 4 ++-- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java index 6430db00..275d9bc2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java @@ -14,4 +14,5 @@ public class ExistingPatient { String yearOfBirth; String address; String gender; + String uuid; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 0f8ae969..e1388fa4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -90,7 +90,7 @@ public List getMatchingPatientDetails(List matchingPat patient.getPersonAddress().getAddress1() + "," + patient.getPersonAddress().getCountyDistrict() + "," + patient.getPersonAddress().getStateProvince(), - patient.getGender())); + patient.getGender(), patient.getUuid())); } return existingPatients; } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 8364cc6b..701fa73e 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -59,7 +59,7 @@ public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { List patients = new ArrayList<>(); patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc"); when(existingPatientService.getMatchingPatients("+91-9876543210")) .thenReturn(new ArrayList<>()); when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) @@ -104,7 +104,7 @@ public void shouldReturnPatientRecordWhenMatchingPatientFoundWithPhoneNumber() t Patient patient = mock(Patient.class); List patients = new ArrayList<>(); patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M"); + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc"); List existingPatients = new ArrayList<>(); existingPatients.add(existingPatient); when(existingPatientService.getMatchingPatients("+91-9876543210")) From dafc343bb304aeac6ddd23e9f9de67a471206737 Mon Sep 17 00:00:00 2001 From: meghna Date: Tue, 1 Jun 2021 16:36:07 +0530 Subject: [PATCH 094/264] 183 | Meghna|Nazeer | Refactors the matching patient to return all matched patients using fuzzy logic --- .../org/bahmni/module/hip/web/controller/PatientController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 81744855..5ec69906 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -39,7 +39,7 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat if (matchingPatients.size() == 0) { matchingPatients = existingPatientService.getMatchingPatients(patientName, Integer.parseInt(patientYearOfBirth), patientGender); - if (matchingPatients.size() != 1) { + if (matchingPatients.size() == 0) { return ResponseEntity.ok().body(new ErrorRepresentation(new Error( ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); } From 75e2faf519c6a0ece74b9b57fb070c7dd9dbad03 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Fri, 4 Jun 2021 10:47:41 +0530 Subject: [PATCH 095/264] 222|Nazeer|Fixes Null pointer exception where village field is empty --- .../web/service/ExistingPatientService.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index e1388fa4..21ea1621 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -85,16 +85,24 @@ private List filterPatientsByGender(String patientGender, List public List getMatchingPatientDetails(List matchingPatients) { List existingPatients = new ArrayList<>(); for (Patient patient : matchingPatients) { - existingPatients.add(new ExistingPatient(patient.getGivenName() + " " + patient.getFamilyName(), - getYearOfBirth(patient.getAge()).toString(), - patient.getPersonAddress().getAddress1() + - "," + patient.getPersonAddress().getCountyDistrict() + - "," + patient.getPersonAddress().getStateProvince(), - patient.getGender(), patient.getUuid())); + existingPatients.add( + new ExistingPatient(patient.getGivenName() + " " + patient.getFamilyName(), + getYearOfBirth(patient.getAge()).toString(), + getAddress(patient), + patient.getGender(), patient.getUuid())); } return existingPatients; } + private String getAddress(Patient patient) { + if (patient.getPersonAddress() != null) { + return patient.getPersonAddress().getAddress1() + + "," + patient.getPersonAddress().getCountyDistrict() + + "," + patient.getPersonAddress().getStateProvince(); + } + return ""; + } + public String getPatientWithHealthId(String healthId) { return existingPatientDao.getPatientUuidWithHealthId(healthId); } From f72bed27f692ab914616c61a291b8ef6160aabbb Mon Sep 17 00:00:00 2001 From: Tazeen Khan Date: Tue, 8 Jun 2021 12:20:48 +0530 Subject: [PATCH 096/264] 230|[Tazeen|Nazeer]|Adds returning phone number in existing patient API response --- .../module/hip/api/dao/ExistingPatientDao.java | 4 +++- .../hip/api/dao/impl/ExistingPatientDaoImpl.java | 12 ++++++++++++ .../bahmni/module/hip/web/model/ExistingPatient.java | 1 + .../hip/web/service/ExistingPatientService.java | 2 +- .../hip/web/controller/PatientControllerTest.java | 4 ++-- 5 files changed, 19 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index d8edc659..f33de03c 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -7,4 +7,6 @@ public interface ExistingPatientDao { String getPatientUuidWithHealthId(String healthId); List getPatientsWithPhoneNumber(String phoneNumber); -} + String getPhoneNumber(Integer patientId); + + } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index e7b5c729..f4e49216 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -15,6 +15,7 @@ public class ExistingPatientDaoImpl implements ExistingPatientDao { private final SessionFactory sessionFactory; + private static final int PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID = 15; @Autowired public ExistingPatientDaoImpl(SessionFactory sessionFactory) { @@ -39,5 +40,16 @@ public List getPatientsWithPhoneNumber(String phoneNumber) { .add(Restrictions.eq("pa.value", phoneNumber)); return criteria.list(); } + + @Override + public String getPhoneNumber(Integer patientId) { + String getPatientPhoneNumberWithPatientIdQuery = + "select value from person_attribute where person_id=:patientId and person_attribute_type_id=" + + PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID + ";"; + Query query = this.sessionFactory.openSession().createSQLQuery(getPatientPhoneNumberWithPatientIdQuery); + query.setParameter("patientId", patientId); + List phoneNumbers = query.list(); + return phoneNumbers.size() > 0 ? phoneNumbers.get(0) : null; + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java index 275d9bc2..c9e53640 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java @@ -15,4 +15,5 @@ public class ExistingPatient { String address; String gender; String uuid; + String phoneNumber; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index e1388fa4..006afd4b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -90,7 +90,7 @@ public List getMatchingPatientDetails(List matchingPat patient.getPersonAddress().getAddress1() + "," + patient.getPersonAddress().getCountyDistrict() + "," + patient.getPersonAddress().getStateProvince(), - patient.getGender(), patient.getUuid())); + patient.getGender(), patient.getUuid(), existingPatientDao.getPhoneNumber(patient.getPatientId()))); } return existingPatients; } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 701fa73e..8c62eecb 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -59,7 +59,7 @@ public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { List patients = new ArrayList<>(); patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc"); + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc", "9123456780"); when(existingPatientService.getMatchingPatients("+91-9876543210")) .thenReturn(new ArrayList<>()); when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) @@ -104,7 +104,7 @@ public void shouldReturnPatientRecordWhenMatchingPatientFoundWithPhoneNumber() t Patient patient = mock(Patient.class); List patients = new ArrayList<>(); patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc"); + ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc", "9123456780"); List existingPatients = new ArrayList<>(); existingPatients.add(existingPatient); when(existingPatientService.getMatchingPatients("+91-9876543210")) From d097925a536d6615b4c18b27ed4edc68da4b2248 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 8 Jun 2021 13:28:17 +0530 Subject: [PATCH 097/264] 202|Nazeer/Sree Ranjani|Adds deployment script (#21) --- scripts/hip_omod_deploy.sh | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 scripts/hip_omod_deploy.sh diff --git a/scripts/hip_omod_deploy.sh b/scripts/hip_omod_deploy.sh new file mode 100644 index 00000000..956be8c8 --- /dev/null +++ b/scripts/hip_omod_deploy.sh @@ -0,0 +1,39 @@ +#Download latest HIP OMOD and relaunch openmrs +username=*** +token=**** +list_artifacts=https://api.github.com/repos/Bahmni-Covid19/openmrs-module-hip/actions/artifacts +omod_file=hipmodule-omod-0.1-SNAPSHOT.omod + +source /root/deployScripts/artifacts/omod-hip + +#Get artifact's download URL from the List artifact endpoint +artifact_id=$(curl "${list_artifacts}" | jq ".artifacts[0].id") +artifact_url=$(curl "${list_artifacts}" | jq ".artifacts[0].archive_download_url" | sed s/\"//g) + +if [ "$PUBLISHED_HIP_ARTIFACTID" != "$artifact_id" ] +then +#Download the artifact +curl -L -o package_${artifact_id}.zip -u${username}:${token} ${artifact_url} + +#Remove old HIP OMOD from /opt/openmrs/modules +rm -rf /opt/openmrs/modules/${omod_file} + +#Unzip new package +mkdir ./package_${artifact_id} +unzip -d ./package_${artifact_id} package_${artifact_id}.zip +cp package_${artifact_id}/${omod_file} /opt/openmrs/modules +chmod 777 /opt/openmrs/modules/${omod_file} +chown bahmni:bahmni /opt/openmrs/modules/${omod_file} + +# Restart Openmrs +systemctl restart openmrs + +# Cleanup +rm -f ./package_${artifact_id}.zip +rm -rf ./package_${artifact_id} + +echo "PUBLISHED_HIP_ARTIFACTID=${artifact_id}" > /root/deployScripts/artifacts/omod-hip +else +echo "Artifaact didnt change" +fi +~ From d13a8c19ad25dc7d6890bc41f20f8e7f7cd09170 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Thu, 10 Jun 2021 10:13:20 +0530 Subject: [PATCH 098/264] 230|Nazeer/Tazeen|Refactors formatted the code --- .../org/bahmni/module/hip/api/dao/ExistingPatientDao.java | 4 +++- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 2 +- .../bahmni/module/hip/web/service/ExistingPatientService.java | 4 ++-- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index f33de03c..ca3dcd09 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -6,7 +6,9 @@ public interface ExistingPatientDao { String getPatientUuidWithHealthId(String healthId); + List getPatientsWithPhoneNumber(String phoneNumber); + String getPhoneNumber(Integer patientId); - } +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index f4e49216..b7d2cf03 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -29,7 +29,7 @@ public String getPatientUuidWithHealthId(String healthId) { "\t\t\t\t WHERE identifier = :healthId ;"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientWithHealthIdQuery); query.setParameter("healthId", healthId); - List patientUuids = query.list(); + List patientUuids = query.list(); return patientUuids.size() > 0 ? patientUuids.get(0) : null; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 9e51123e..0e972541 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -25,7 +25,7 @@ public ExistingPatientService(PatientService patientService, ExistingPatientDao } public List getMatchingPatients(String phoneNumber) { - return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber); + return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber); } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { @@ -89,7 +89,7 @@ public List getMatchingPatientDetails(List matchingPat new ExistingPatient(patient.getGivenName() + " " + patient.getFamilyName(), getYearOfBirth(patient.getAge()).toString(), getAddress(patient), - patient.getGender(), patient.getUuid(),existingPatientDao.getPhoneNumber(patient.getPatientId()))); + patient.getGender(), patient.getUuid(), existingPatientDao.getPhoneNumber(patient.getPatientId()))); } return existingPatients; } From c75984659a00374e188b06ace71d18811cbaffb9 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Thu, 10 Jun 2021 14:44:00 +0530 Subject: [PATCH 099/264] 230|Nazeer/Tazeen| Refactors using the primaryContact name getting the phone number --- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index b7d2cf03..6899ce89 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -15,7 +15,6 @@ public class ExistingPatientDaoImpl implements ExistingPatientDao { private final SessionFactory sessionFactory; - private static final int PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID = 15; @Autowired public ExistingPatientDaoImpl(SessionFactory sessionFactory) { @@ -44,8 +43,9 @@ public List getPatientsWithPhoneNumber(String phoneNumber) { @Override public String getPhoneNumber(Integer patientId) { String getPatientPhoneNumberWithPatientIdQuery = - "select value from person_attribute where person_id=:patientId and person_attribute_type_id=" - + PERSON_PHONE_NUMBER_ATTRIBUTE_TYPE_ID + ";"; + " SELECT value FROM person_attribute INNER JOIN person_attribute_type ON" + + " person_attribute.person_attribute_type_id = person_attribute_type.person_attribute_type_id " + + "where person_id = :patientId and name = \"primaryContact\";"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientPhoneNumberWithPatientIdQuery); query.setParameter("patientId", patientId); List phoneNumbers = query.list(); From a2c0641313840e9ea2d05569fa2d7d25ba581da8 Mon Sep 17 00:00:00 2001 From: meghna Date: Thu, 10 Jun 2021 16:11:48 +0530 Subject: [PATCH 100/264] Meghna | Adds dev-setup for omod-hip --- omod/docs/dev-setup.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 omod/docs/dev-setup.md diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md new file mode 100644 index 00000000..7fe5b0eb --- /dev/null +++ b/omod/docs/dev-setup.md @@ -0,0 +1,16 @@ + +## Services: + +- [OMOD-HIP](https://github.com/Bahmni-Covid19/openmrs-module-hip.git) +- [Hip Service](https://github.com/Bahmni-Covid19/hip-service) +- [BahmniApps](https://github.com/Bahmni-Covid19/openmrs-module-bahmniapps) +- [Ndhm-React](https://github.com/Bahmni-Covid19/ndhm-react) + +###Setting up the OMOD-HIP + +1. Clone OMOD-HIP +2. Run the steps to build .omod file + ``` + cd openmrs-module-hip + mvn clean install + ``` From 68653dfc33a385d97a5ee104a905476a0d3f5dcd Mon Sep 17 00:00:00 2001 From: meghna Date: Thu, 10 Jun 2021 19:44:20 +0530 Subject: [PATCH 101/264] Meghna | Adds hip,bahmni,bahmni-vagarnt --- omod/docs/dev-setup.md | 105 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 3 deletions(-) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index 7fe5b0eb..0f8a0544 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -1,16 +1,115 @@ ## Services: - +Clone the basic 5 services: - [OMOD-HIP](https://github.com/Bahmni-Covid19/openmrs-module-hip.git) - [Hip Service](https://github.com/Bahmni-Covid19/hip-service) - [BahmniApps](https://github.com/Bahmni-Covid19/openmrs-module-bahmniapps) - [Ndhm-React](https://github.com/Bahmni-Covid19/ndhm-react) +- [Default-config](https://github.com/Bahmni-Covid19/default-config) + +Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) +###Setup Bahmni using Vagrant + +1. Install [Virtualbox](https://www.virtualbox.org/wiki/Downloads) +2. Install [Vagrant](https://www.vagrantup.com/downloads.html) +3. Clone the `bahmni-vagrant` repo from github inside a folder called `bahmni` + + ```bash + mkdir bahmni + cd bahmni + git clone https://github.com/Bahmni/bahmni-vagrant.git + cd bahmni-vagrant + ``` + +4. Replace the contents of the `Vagrantfile` in `bahmni-vagrant` with the following: + + ```bash + Vagrant.configure(2) do |config| + config.vm.box = "bento/centos-7.6" + config.vm.box_check_update = true + config.ssh.insert_key = false + config.vm.network "private_network", ip: "192.168.33.10" + config.vm.network "forwarded_port", guest: 3306, host: 3306 + config.vm.network "forwarded_port", guest: 8000, host: 8000 + config.vm.network "forwarded_port", guest: 80, host: 80 + + config.vm.synced_folder "..", "/bahmni", :owner => "vagrant" + config.vm.provider "virtualbox" do |v| + v.customize ["modifyvm", :id, "--memory", 3092, "--cpus", 2, "--name", "Bahmni-RPM"] + end + end + ``` + +5. Make vagrant up and open vagrant + + ``` + vagrant up && vagrant ssh + ``` + +6. Now, inside the vagrant box set up a local Bahmni instance by using this document +(Note: install the version 0.92 provided in the [link](https://bahmni.atlassian.net/wiki/spaces/BAH/pages/33128505/Install+Bahmni+on+CentOS)) + +7. Open [bahmni-emr-login](https://192.168.33.10/bahmni/home/index.html#/login), you should see bahmni up and running. + - Username: superman + - Password: Admin123 +###Prerequisites for OMOD-HIP: + +- Download following jars and fhir + - [jackson-core-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar) + - [jackson-annotations-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0.jar) + - [jackson-databind-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0.jar) + - [fhir2-omod-1.0.0-20200925.143534-163.jar](https://openmrs.jfrog.io/artifactory/public/org/openmrs/module/fhir2-omod/1.0.0-SNAPSHOT/fhir2-omod-1.0.0-20200925.143534-163.jar) +- Rename `fhir2-omod-1.0.0-20200925.143534-163.jar` file from `.jar` to `.omod` extension. +- Copy all fies to `bahmni` folder +- Open vagrant and paste the files into `/opt/openmrs/modules/` directory + + ```bash + cd bahmni-vagrant + vagrant ssh + cp /bahmni/jackson-core-2.10.0.jar /opt/openmrs/modules/ + cp /bahmni/jackson-annotations-2.10.0.jar /opt/openmrs/modules/ + cp /bahmni/jackson-databind-2.10.0.jar /opt/openmrs/modules/ + cp /bahmni/fhir2-omod-1.0.0-20200925.143534-163.mod /opt/openmrs/modules/ + ``` +- Restart openmrs `systemctl restart openmrs` + +- Ensure that the module is successfully loaded by navigating through [openmrs](http://192.168.33.10/openmrs) + - username: superman + - password: Admin123 + - Click on `Administration` -> `Manage Modules` under `Modules` +- You can also check the log file for any errors/exceptions: `vi /opt/openmrs/openmrs.log` + in vagrant. + ###Setting up the OMOD-HIP +(Make sure `bahmni` folder is created and `bahmni vagrant` is setup inside `bahmni`) 1. Clone OMOD-HIP + + ``` + cd bahmni + git clone https://github.com/Bahmni-Covid19/openmrs-module-hip.git + ``` + 2. Run the steps to build .omod file - ``` + + ``` cd openmrs-module-hip mvn clean install - ``` + ``` + +3. Move the newly build omod to vagrant and overwrite it and restart OMOD with the new omod + + ``` + vagrant ssh + sudo su + cp /bahmni/openmrs-module-hip/omod/target/hipmodule-omod-0.1-SNAPSHOT.omod /opt/openmrs/modules/ + systemctl restart openmrs + ``` + +4. (Optional) Check log file to see if any errors occurred inside vagrant + + ``` + vi /opt/openmrs/openmrs.log + + ``` From 82de680a32481dc19c84b1f384af26c8b813a04e Mon Sep 17 00:00:00 2001 From: meghna Date: Thu, 10 Jun 2021 20:00:45 +0530 Subject: [PATCH 102/264] Meghna | Adds ndhm-react and bahmni-apps setup --- omod/docs/dev-setup.md | 60 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 6 deletions(-) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index 0f8a0544..e66d0556 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -62,15 +62,15 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) - [fhir2-omod-1.0.0-20200925.143534-163.jar](https://openmrs.jfrog.io/artifactory/public/org/openmrs/module/fhir2-omod/1.0.0-SNAPSHOT/fhir2-omod-1.0.0-20200925.143534-163.jar) - Rename `fhir2-omod-1.0.0-20200925.143534-163.jar` file from `.jar` to `.omod` extension. - Copy all fies to `bahmni` folder -- Open vagrant and paste the files into `/opt/openmrs/modules/` directory - +- Open vagrant and paste the files + ```bash cd bahmni-vagrant vagrant ssh - cp /bahmni/jackson-core-2.10.0.jar /opt/openmrs/modules/ - cp /bahmni/jackson-annotations-2.10.0.jar /opt/openmrs/modules/ - cp /bahmni/jackson-databind-2.10.0.jar /opt/openmrs/modules/ - cp /bahmni/fhir2-omod-1.0.0-20200925.143534-163.mod /opt/openmrs/modules/ + cp /bahmni/jackson-core-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ + cp /bahmni/jackson-annotations-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ + cp /bahmni/jackson-databind-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ + cp /bahmni/fhir2-omod-1.0.0-20200925.143534-163.omod /opt/openmrs/modules/ ``` - Restart openmrs `systemctl restart openmrs` @@ -113,3 +113,51 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) vi /opt/openmrs/openmrs.log ``` +###Installations: + +Please make sure following are done before proceeding forward +- [Yarn](https://classic.yarnpkg.com/en/) +- [Node.js(v10.11.0)](https://classic.yarnpkg.com/en/) +- [Maven](https://maven.apache.org/) +- [Ruby v2.1 (or above)](https://www.ruby-lang.org/en/documentation/installation/) +- [Compass](http://compass-style.org/install/) to compile the SCSS files. +- Install Firefox to run tests for `bahmni-apps` + +####Setting up Bahmni-Apps + +1. Clone bahmni-apps + + ```bash + cd bahmni + git clone https://github.com/Bahmni-Covid19/openmrs-module-bahmniapps.git + cd openmrs-module-bahmniapps + ``` + +2. Change branch to stream1/master (which is the current working master for Hip stream) + + ```bash + git checkout stream1/master + ``` + +3. Run following to build the project + ``` + cd /ui + yarn install + yarn default + ``` +####Setting up ndhm-react (verify-btn pop-up) + +1. Clone ndhm-react + + ```bash + cd bahmni + git clone https://github.com/Bahmni-Covid19/ndhm-react.git + cd ndhm-react + ``` + +2. In master branch run following to build project + + ```bash + yarn install + yarn build + ``` \ No newline at end of file From dd18528eac05f1c2e4bafa2d3941d407eec4e73f Mon Sep 17 00:00:00 2001 From: MeghnaThoughtworks Date: Thu, 10 Jun 2021 20:22:21 +0530 Subject: [PATCH 103/264] Meghna | Changes indentation --- omod/docs/dev-setup.md | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index e66d0556..0c7e930f 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -8,13 +8,14 @@ Clone the basic 5 services: - [Default-config](https://github.com/Bahmni-Covid19/default-config) Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) -###Setup Bahmni using Vagrant + +### Setup Bahmni using Vagrant: 1. Install [Virtualbox](https://www.virtualbox.org/wiki/Downloads) 2. Install [Vagrant](https://www.vagrantup.com/downloads.html) 3. Clone the `bahmni-vagrant` repo from github inside a folder called `bahmni` - ```bash + ``` mkdir bahmni cd bahmni git clone https://github.com/Bahmni/bahmni-vagrant.git @@ -23,7 +24,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) 4. Replace the contents of the `Vagrantfile` in `bahmni-vagrant` with the following: - ```bash + ``` Vagrant.configure(2) do |config| config.vm.box = "bento/centos-7.6" config.vm.box_check_update = true @@ -53,7 +54,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) - Username: superman - Password: Admin123 -###Prerequisites for OMOD-HIP: +### Prerequisites for OMOD-HIP: - Download following jars and fhir - [jackson-core-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar) @@ -64,7 +65,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) - Copy all fies to `bahmni` folder - Open vagrant and paste the files - ```bash + ``` cd bahmni-vagrant vagrant ssh cp /bahmni/jackson-core-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ @@ -81,7 +82,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) - You can also check the log file for any errors/exceptions: `vi /opt/openmrs/openmrs.log` in vagrant. -###Setting up the OMOD-HIP +### Setting up the OMOD-HIP (Make sure `bahmni` folder is created and `bahmni vagrant` is setup inside `bahmni`) 1. Clone OMOD-HIP @@ -113,7 +114,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) vi /opt/openmrs/openmrs.log ``` -###Installations: +### Installations: Please make sure following are done before proceeding forward - [Yarn](https://classic.yarnpkg.com/en/) @@ -123,11 +124,11 @@ Please make sure following are done before proceeding forward - [Compass](http://compass-style.org/install/) to compile the SCSS files. - Install Firefox to run tests for `bahmni-apps` -####Setting up Bahmni-Apps +### Setting up Bahmni-Apps 1. Clone bahmni-apps - ```bash + ``` cd bahmni git clone https://github.com/Bahmni-Covid19/openmrs-module-bahmniapps.git cd openmrs-module-bahmniapps @@ -135,7 +136,7 @@ Please make sure following are done before proceeding forward 2. Change branch to stream1/master (which is the current working master for Hip stream) - ```bash + ``` git checkout stream1/master ``` @@ -145,11 +146,11 @@ Please make sure following are done before proceeding forward yarn install yarn default ``` -####Setting up ndhm-react (verify-btn pop-up) +### Setting up ndhm-react (verify-btn pop-up) 1. Clone ndhm-react - ```bash + ``` cd bahmni git clone https://github.com/Bahmni-Covid19/ndhm-react.git cd ndhm-react @@ -157,7 +158,7 @@ Please make sure following are done before proceeding forward 2. In master branch run following to build project - ```bash + ``` yarn install yarn build ``` \ No newline at end of file From cea456a595f2a109c812e22af896fe18c6fdb398 Mon Sep 17 00:00:00 2001 From: MeghnaThoughtworks Date: Thu, 10 Jun 2021 21:24:47 +0530 Subject: [PATCH 104/264] Meghna | Adds default-config setup --- omod/docs/dev-setup.md | 59 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index 0c7e930f..f357ea25 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -161,4 +161,63 @@ Please make sure following are done before proceeding forward ``` yarn install yarn build + ``` + +### Setting up default-config + +1. Clone default-config + + ``` + cd bahmni + git clone https://github.com/Bahmni-Covid19/default-config.git + cd default-config + ``` +2. Change branch to stream1/master (which is the current working master for Hip stream) + + ``` + git checkout stream1/master + ``` +3. Browse to this file `openmrs/apps/registration/extension.json` and change host to localhost in `NDHMIdentifierLookup`,`extensionParams` + + ``` + "hipUrl" : "http://localhost:9052", + "bahmniUrl": "https://192.168.33.10/openmrs/ws/rest/v1/hip" + ``` + +## Linking the repos inside your local vagrant + +1. Go inside local vagrant + + ``` + cd bahmni-vagrant + vagrant ssh + cd /var/www/ + ll + ``` + you will see bahmniapps and bahmni_config being linked already to older versions, we will unlink and link to our local repos +2. Unlink old links + + ``` + unlink bahmniapps + unlink bahmni_config + ``` + +3. Link new build repositories + + ``` + link -s /bahmni/ndhm-react/build ndhm + link -s /bahmni/default-config bahmni_config + link -s /bahmni/openmrs-module-bahmniapps/ui/app bahmniapps + ``` + +4. Change config setting for `ndhm` redirection + + ``` + vi /etc/httpd/conf.d/ssl.conf + ``` + +5. Search for Alias by typing `/Alias` and after this line `Alias /implementer-interface /var/www/implementer_interface` add + + ``` + Alias /ndhm /var/www/ndhm ``` \ No newline at end of file From 1737cf195840ece397ab8e1f45c37c40dc09b0ef Mon Sep 17 00:00:00 2001 From: MeghnaThoughtworks Date: Thu, 10 Jun 2021 22:35:56 +0530 Subject: [PATCH 105/264] Meghna | Adds links for refernces --- omod/docs/dev-setup.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index f357ea25..5044251c 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -1,3 +1,11 @@ +### Important links for reference: +- [OPENMRS WIKI](https://wiki.openmrs.org/) +- [FHIR](https://hl7.org/FHIR/documentation.html) +- [SBX healthID creation](https://healthidsbx.ndhm.gov.in/) +- [HIU](https://dev.ndhm.gov.in/hiu#/) +- [PHR/NDHM Architecture](https://sandbox.ndhm.gov.in/docs/building_blocks) +- [HIP API Standards](https://sandbox.ndhm.gov.in/swagger/ndhm-hip.yaml) + ## Services: Clone the basic 5 services: From 91eaf0c8e31054025c49f3718438c1cabf786e45 Mon Sep 17 00:00:00 2001 From: Meghna Tanwal <61121405+MeghnaThoughtworks@users.noreply.github.com> Date: Fri, 11 Jun 2021 14:41:04 +0530 Subject: [PATCH 106/264] 240 | Meghna | Updates the fhir2.omod --- omod/docs/dev-setup.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index 5044251c..8048ca7d 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -68,9 +68,8 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) - [jackson-core-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.10.0/jackson-core-2.10.0.jar) - [jackson-annotations-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.10.0/jackson-annotations-2.10.0.jar) - [jackson-databind-2.10.0.jar](https://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.10.0/jackson-databind-2.10.0.jar) - - [fhir2-omod-1.0.0-20200925.143534-163.jar](https://openmrs.jfrog.io/artifactory/public/org/openmrs/module/fhir2-omod/1.0.0-SNAPSHOT/fhir2-omod-1.0.0-20200925.143534-163.jar) -- Rename `fhir2-omod-1.0.0-20200925.143534-163.jar` file from `.jar` to `.omod` extension. -- Copy all fies to `bahmni` folder + - [fhir2-omod-1.0.0-SNAPSHOT.omod](https://drive.google.com/drive/folders/180cdYOWqBU5vffZnzdRy5PsyEPvn3Ti5) +- Copy all files to `bahmni` folder - Open vagrant and paste the files ``` @@ -79,7 +78,7 @@ Others can be found here : [Bahmni-Covid19](https://github.com/Bahmni-Covid19/) cp /bahmni/jackson-core-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ cp /bahmni/jackson-annotations-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ cp /bahmni/jackson-databind-2.10.0.jar /opt/openmrs/openmrs/WEB-INF/lib/ - cp /bahmni/fhir2-omod-1.0.0-20200925.143534-163.omod /opt/openmrs/modules/ + cp /bahmni/fhir2-omod-1.0.0-SNAPSHOT.omod /opt/openmrs/modules/ ``` - Restart openmrs `systemctl restart openmrs` @@ -228,4 +227,4 @@ Please make sure following are done before proceeding forward ``` Alias /ndhm /var/www/ndhm - ``` \ No newline at end of file + ``` From 7435c732319fe8d42ea12acb675f141fa0150596 Mon Sep 17 00:00:00 2001 From: MeghnaThoughtworks Date: Fri, 11 Jun 2021 15:33:53 +0530 Subject: [PATCH 107/264] 241 | Mahesh/Meghna | Refactors code to check for null pointer exception --- .../java/org/bahmni/module/hip/web/model/FhirLabResult.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 5b1cc958..87770c82 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -16,6 +16,7 @@ import org.hl7.fhir.r4.model.Practitioner; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; +import javax.validation.constraints.Null; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -87,7 +88,7 @@ private static void mapToObsFromLabResult(LabOrderResult result, Patient patient obs.setId(result.getTestUuid()); obs.setCode(new CodeableConcept().setText( result.getTestName( ))); try { - Float f = Float.parseFloat(result.getResult()); + float f = result.getResult()!=null? Float.parseFloat(result.getResult()): (float) 0; obs.setValue(new Quantity().setValue(f).setUnit(result.getTestUnitOfMeasurement())); } catch (NumberFormatException ex ) { obs.setValue(new StringType().setValue(result.getResult())); From 60b31e1314a30898aef9767b52329957292e381d Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Fri, 11 Jun 2021 16:09:40 +0530 Subject: [PATCH 108/264] Update dev-setup.md --- omod/docs/dev-setup.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/docs/dev-setup.md b/omod/docs/dev-setup.md index 8048ca7d..85165471 100644 --- a/omod/docs/dev-setup.md +++ b/omod/docs/dev-setup.md @@ -163,7 +163,7 @@ Please make sure following are done before proceeding forward cd ndhm-react ``` -2. In master branch run following to build project +2. In main branch run following to build project ``` yarn install @@ -212,9 +212,9 @@ Please make sure following are done before proceeding forward 3. Link new build repositories ``` - link -s /bahmni/ndhm-react/build ndhm - link -s /bahmni/default-config bahmni_config - link -s /bahmni/openmrs-module-bahmniapps/ui/app bahmniapps + ln -s /bahmni/ndhm-react/build ndhm + ln -s /bahmni/default-config bahmni_config + ln -s /bahmni/openmrs-module-bahmniapps/ui/app bahmniapps ``` 4. Change config setting for `ndhm` redirection From a224341bbf63b58380fc62d3b158b5539d33a837 Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Thu, 1 Jul 2021 12:11:10 +0530 Subject: [PATCH 109/264] 188-[Mahesh] Adds adds undisclosed value to the gender --- api/src/main/resources/liquibase.xml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index de1abb40..23cf38ff 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -55,5 +55,17 @@ update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'Health ID') where property = 'bahmni.extraPatientIdentifierTypes'; + + + + + select count(*) from global_property where property = 'mrs.genders' and property_value='{"M":"Male", "F":"Female","O":"Other"}' + + + Adding Undisclosed to gender + + update global_property set property_value='{"M":"Male", "F":"Female","O":"Other", "U":"Undisclosed"}' where property = 'mrs.genders'; + + \ No newline at end of file From 9aeb572fbf2469946ce039e04c5079310c734852 Mon Sep 17 00:00:00 2001 From: Mahesh-I Date: Thu, 22 Jul 2021 18:00:02 +0530 Subject: [PATCH 110/264] 144-[Mahesh|Rohit] Adds matchs any format of phoneNumber in the fuzzy logic --- .../org/bahmni/module/hip/api/dao/ExistingPatientDao.java | 2 +- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 4 ++-- .../module/hip/web/service/ExistingPatientService.java | 8 +++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index ca3dcd09..e11822c6 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -7,7 +7,7 @@ public interface ExistingPatientDao { String getPatientUuidWithHealthId(String healthId); - List getPatientsWithPhoneNumber(String phoneNumber); + List getPatientsWithPhoneNumber(String []phoneNumberFormats); String getPhoneNumber(Integer patientId); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index 6899ce89..bcfa9b55 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -33,10 +33,10 @@ public String getPatientUuidWithHealthId(String healthId) { } @Override - public List getPatientsWithPhoneNumber(String phoneNumber) { + public List getPatientsWithPhoneNumber(String []phoneNumberFormats) { Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Patient.class); criteria.createCriteria("attributes", "pa") - .add(Restrictions.eq("pa.value", phoneNumber)); + .add(Restrictions.in("pa.value", phoneNumberFormats)); return criteria.list(); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 0e972541..6da06349 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -25,7 +25,13 @@ public ExistingPatientService(PatientService patientService, ExistingPatientDao } public List getMatchingPatients(String phoneNumber) { - return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber); + String phoneNumberWithOutCode = phoneNumber.substring(phoneNumber.length() - 10); + String []formats = new String[4]; + formats[0] = "+91-" + phoneNumberWithOutCode; + formats[1] = "91" + phoneNumberWithOutCode; + formats[2] = phoneNumberWithOutCode; + formats[3] = "+91" + phoneNumberWithOutCode; + return existingPatientDao.getPatientsWithPhoneNumber(formats); } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { From 0d28ff3a865ff6e72734a7bb9d4d0b73e53f1eff Mon Sep 17 00:00:00 2001 From: Rohit Yawalkar Date: Mon, 26 Jul 2021 14:55:10 +0530 Subject: [PATCH 111/264] 144-[Mahesh|Rohit] Refactors extracts magic literals to variables --- .../module/hip/web/service/ExistingPatientService.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 6da06349..03a8521a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -25,8 +25,10 @@ public ExistingPatientService(PatientService patientService, ExistingPatientDao } public List getMatchingPatients(String phoneNumber) { - String phoneNumberWithOutCode = phoneNumber.substring(phoneNumber.length() - 10); - String []formats = new String[4]; + final int PHONE_NUMBER_LENGTH = 10; + final int NUMBER_OF_PHONE_NUMBER_FORMATS = 4; + String phoneNumberWithOutCode = phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH); + String []formats = new String[NUMBER_OF_PHONE_NUMBER_FORMATS]; formats[0] = "+91-" + phoneNumberWithOutCode; formats[1] = "91" + phoneNumberWithOutCode; formats[2] = phoneNumberWithOutCode; From 6501775d96da652e3e49d155f8fee4e8749794cf Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Mon, 2 Aug 2021 11:05:24 +0530 Subject: [PATCH 112/264] 276|Nazeer|Tazeen| Adds an API endpoint to fetch the last visit carecontexts --- .../hip/api/dao/CareContextRepository.java | 2 + .../hip/api/dao/ExistingPatientDao.java | 2 + .../dao/impl/CareContextRepositoryImpl.java | 48 +++++++++++++++++++ .../api/dao/impl/ExistingPatientDaoImpl.java | 19 ++++++++ .../module/hip/model/PatientCareContext.java | 4 ++ .../web/controller/CareContextController.java | 18 +++++++ .../web/model/serializers/NewCareContext.java | 20 ++++++++ .../hip/web/service/CareContextService.java | 35 +++++++++++++- .../web/service/CareContextServiceTest.java | 14 +++--- 9 files changed, 155 insertions(+), 7 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/serializers/NewCareContext.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java index ae1a62dc..07ddbac5 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -7,4 +7,6 @@ public interface CareContextRepository { List getPatientCareContext(String patientUuid); + List getNewPatientCareContext(Integer patientId); + } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index ca3dcd09..ec072b3a 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -11,4 +11,6 @@ public interface ExistingPatientDao { String getPhoneNumber(Integer patientId); + String getPatientHealthIdWithPatientId(Integer patientId); + } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index ce3d0b95..3c591c7a 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -72,4 +72,52 @@ public List getPatientCareContext(String patientUuid) { query.setParameter("patientUuid", patientUuid); return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); } + + public List getNewPatientCareContext(Integer patientId) { + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select\n" + + " care_context_type as careContextType,\n" + + " case when care_context_type = 'PROGRAM' then program_name else visit_type_name end as careContextName,\n" + + " case when care_context_type = 'PROGRAM' then value_reference else visit_type_id end as careContextReference\n" + + "from\n" + + " (\n" + + " select\n" + + " ppa.value_reference,\n" + + " p3.uuid,\n" + + " e.patient_id,\n" + + " p2.program_id,\n" + + " vt.visit_type_id,\n" + + " vt.name,\n" + + " pp.patient_program_id,\n" + + " p2.name as program_name,\n" + + " vt.name as visit_type_name,\n" + + " case when p2.program_id is null then 'VISIT_TYPE' else 'PROGRAM' end as care_context_type\n" + + " from\n" + + " encounter as e\n" + + " left join episode_encounter ee on e.encounter_id = ee.encounter_id\n" + + " left join episode_patient_program epp on ee.episode_id = epp.episode_id\n" + + " left join patient_program pp on epp.patient_program_id = pp.patient_program_id\n" + + " left join program p2 on pp.program_id = p2.program_id\n" + + " left join visit v on v.visit_id = e.visit_id\n" + + " and v.patient_id = e.patient_id\n" + + " left join visit_type vt on v.visit_type_id = vt.visit_type_id\n" + + " left join person p3 on e.patient_id = p3.person_id\n" + + " left join patient_program_attribute ppa on pp.patient_program_id = ppa.patient_program_id\n" + + " where\n" + + " v.visit_id = (\n" + + " select\n" + + " max(visit_id)\n" + + " from\n" + + " visit\n" + + " where\n" + + " patient_id = :patientId\n" + + " )\n" + + " ) as a\n" + + "group by\n" + + " careContextName;\n").addScalar("careContextReference", IntegerType.INSTANCE) + .addScalar("careContextType", StringType.INSTANCE) + .addScalar("careContextName", StringType.INSTANCE); + query.setParameter("patientId", patientId); + return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); + } + } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index 6899ce89..b3c076f8 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -21,6 +21,7 @@ public ExistingPatientDaoImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } + @Override public String getPatientUuidWithHealthId(String healthId) { String getPatientWithHealthIdQuery = "SELECT p.uuid FROM person AS p INNER JOIN \n" + @@ -51,5 +52,23 @@ public String getPhoneNumber(Integer patientId) { List phoneNumbers = query.list(); return phoneNumbers.size() > 0 ? phoneNumbers.get(0) : null; } + + @Override + public String getPatientHealthIdWithPatientId(Integer patientId) { + String getPatientHealthId = "select\n" + + "\tpi.identifier\n" + + "from\n" + + "\tpatient_identifier as pi\n" + + "inner join patient_identifier_type as piy on\n" + + "\tpi.identifier_type = piy.patient_identifier_type_id\n" + + "where\n" + + "\tpi.patient_id = :patientId\n" + + "\tand piy.name = 'Health ID';"; + Query query = this.sessionFactory.openSession().createSQLQuery(getPatientHealthId); + query.setParameter("patientId", patientId); + List healthIds = query.list(); + return healthIds.size() > 0 ? healthIds.get(0) : null; + } } +x \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java index 1e798d52..a2c9a603 100644 --- a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java @@ -15,4 +15,8 @@ public class PatientCareContext { private String careContextType; private String careContextName; private Integer careContextReference; + + public String getCareContextName() { + return careContextName; + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java index 73b1cd96..88656f49 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/CareContextController.java @@ -6,6 +6,7 @@ import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; @@ -41,4 +42,21 @@ ResponseEntity getCareContextForPatient(@RequestParam(required = false) Strin } return ResponseEntity.ok(careContextForPatient); } + + @RequestMapping(method = RequestMethod.GET, value = "/careContext/new", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity getNewCareContextForPatient(@RequestParam(required = false) String patientUuid) { + if (patientUuid == null || patientUuid.trim().isEmpty()) { + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + } + if (!validationService.isValidPatient(patientUuid)) + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + Object careContextForPatient = careContextService.newCareContextsForPatient(patientUuid); + if (careContextForPatient.equals(false)) { + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(ClientError.noPatientFound()); + } + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(careContextForPatient); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/NewCareContext.java b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/NewCareContext.java new file mode 100644 index 00000000..0abece48 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/serializers/NewCareContext.java @@ -0,0 +1,20 @@ +package org.bahmni.module.hip.web.model.serializers; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.bahmni.module.hip.model.PatientCareContext; + +import java.util.List; + +@Builder +@Getter +@Setter +@AllArgsConstructor +public class NewCareContext { + String patientName; + String healthId; + String patientReferenceNumber; + List careContexts; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java index 281ed901..96de1dcd 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -1,18 +1,32 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.api.dao.ExistingPatientDao; +import org.bahmni.module.hip.model.PatientCareContext; import org.bahmni.module.hip.web.model.CareContext; +import org.bahmni.module.hip.web.model.serializers.NewCareContext; import org.openmrs.Encounter; +import org.openmrs.Patient; +import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; + @Service public class CareContextService { private final CareContextRepository careContextRepository; + private final PatientService patientService; + private final ValidationService validationService; + private final ExistingPatientDao existingPatientDao; @Autowired - public CareContextService(CareContextRepository careContextRepository) { + public CareContextService(CareContextRepository careContextRepository, PatientService patientService, ValidationService validationService, ExistingPatientDao existingPatientDao) { this.careContextRepository = careContextRepository; + this.patientService = patientService; + this.validationService = validationService; + this.existingPatientDao = existingPatientDao; } CareContext careContextFor(Encounter emrEncounter, Class careContextType) { @@ -31,4 +45,23 @@ public Type careContextForPatient(String patientUuid) { return (Type) careContextRepository.getPatientCareContext(patientUuid); } + public NewCareContext newCareContextsForPatient(String patientUuid) { + Patient patient = patientService.getPatientByUuid(patientUuid); + return new NewCareContext(patient.getGivenName() + (patient.getMiddleName() == null ? " " : patient.getMiddleName()) + patient.getFamilyName(), + existingPatientDao.getPatientHealthIdWithPatientId(patient.getId()), + patient.getPatientIdentifier("Patient Identifier").getIdentifier(), + getCareContexts(patient.getId())); + } + + private List getCareContexts(Integer patientId) { + List patientCareContexts = careContextRepository.getNewPatientCareContext(patientId); + if (patientCareContexts.size() > 1) { + List result = new ArrayList<>(); + for (PatientCareContext careContext : patientCareContexts) { + if (!validationService.isValidVisit(careContext.getCareContextName())) result.add(careContext); + } + return result; + } + return patientCareContexts; + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java index fab85b20..cdad65a4 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java @@ -1,21 +1,23 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.bahmni.module.hip.model.PatientCareContext; import org.junit.Test; +import org.openmrs.api.PatientService; import java.util.ArrayList; import java.util.List; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; public class CareContextServiceTest { - private CareContextRepository careContextRepository = mock(CareContextRepository.class); + private final CareContextRepository careContextRepository = mock(CareContextRepository.class); + private final PatientService patientService = mock(PatientService.class); + private final ValidationService validationService = mock(ValidationService.class); + private final ExistingPatientDao existingPatientDao = mock(ExistingPatientDao.class); - private CareContextService careContextServiceObject = new CareContextService(careContextRepository); + private final CareContextService careContextServiceObject = new CareContextService(careContextRepository, patientService, validationService, existingPatientDao); @Test public void shouldFetchAllCareContextForPatient() { From 959437ef36416c8a4c6731d7e96057e8a242a982 Mon Sep 17 00:00:00 2001 From: Tazeen Khan Date: Tue, 3 Aug 2021 12:09:54 +0530 Subject: [PATCH 113/264] 276[Tazeen|Nazeer]| Add Test cases for new care context --- .../controller/CareContextControllerTest.java | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java index 9cc9e273..1a2f5cdb 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java @@ -3,6 +3,7 @@ import org.bahmni.module.hip.model.PatientCareContext; import org.bahmni.module.hip.web.TestConfiguration; import org.bahmni.module.hip.web.client.ClientError; +import org.bahmni.module.hip.web.model.serializers.NewCareContext; import org.bahmni.module.hip.web.service.CareContextService; import org.bahmni.module.hip.web.service.ValidationService; import org.codehaus.jackson.map.ObjectMapper; @@ -112,4 +113,46 @@ public void shouldReturn400BadRequestWhenNoPatientIdProvided() throws Exception String responseBody = new ObjectMapper().writeValueAsString(ClientError.noPatientIdProvided()); assertEquals(responseBody, content); } + + @Test + public void shouldReturn400BadRequestWhenNoPatientIdProvidedForNewContext() throws Exception { + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/careContext/new", RestConstants.VERSION_1)) + .param("patientUuid", " ") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + String responseBody = new ObjectMapper().writeValueAsString(ClientError.noPatientIdProvided()); + assertEquals(responseBody, content); + } + + @Test + public void shouldReturn400BadRequestForInvalidPatientUUID() throws Exception { + when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(false); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/careContext/new", RestConstants.VERSION_1)) + .param("patientUuid", "0f90531a-285c-438b-b265-bb3abb4745bd") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + String content = mvcResult.getResponse().getContentAsString(); + String responseBody = new ObjectMapper().writeValueAsString(ClientError.invalidPatientId()); + assertEquals(responseBody, content); + } + + @Test + public void shouldReturn200OKForValidPatientUUID() throws Exception { + NewCareContext newCareContext = new NewCareContext("abc", "abc@sbc", "12gvx", new ArrayList<>()); + + when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); + when(careContextService.newCareContextsForPatient(anyString())) + .thenReturn(newCareContext); + + mockMvc.perform(get(String.format("/rest/%s/hip/careContext/new", RestConstants.VERSION_1)) + .param("patientUuid", "0f90531a-285c-438b-b265-bb3abb4745bd") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + } } From 9e46409c5997d6365858e7182a34d3221c6c6d3c Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Tue, 3 Aug 2021 12:15:52 +0530 Subject: [PATCH 114/264] 276|Tazeen|Nazeer| Removes the * import --- .../module/hip/web/service/CareContextServiceTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java index cdad65a4..bc93e7eb 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/CareContextServiceTest.java @@ -9,7 +9,10 @@ import java.util.ArrayList; import java.util.List; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; public class CareContextServiceTest { private final CareContextRepository careContextRepository = mock(CareContextRepository.class); From ad3fb4654d61ff70d966ed6c75f3b0236a193822 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 17 Aug 2021 16:09:41 +0530 Subject: [PATCH 115/264] =?UTF-8?q?Revert=20"144-[Mahesh|Rohit]=20Adds=20m?= =?UTF-8?q?atchs=20any=20format=20of=20phoneNumber=20in=20the=20fuzzy?= =?UTF-8?q?=E2=80=A6"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bahmni/module/hip/api/dao/ExistingPatientDao.java | 2 +- .../hip/api/dao/impl/ExistingPatientDaoImpl.java | 4 ++-- .../module/hip/web/service/ExistingPatientService.java | 10 +--------- 3 files changed, 4 insertions(+), 12 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java index e11822c6..ca3dcd09 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ExistingPatientDao.java @@ -7,7 +7,7 @@ public interface ExistingPatientDao { String getPatientUuidWithHealthId(String healthId); - List getPatientsWithPhoneNumber(String []phoneNumberFormats); + List getPatientsWithPhoneNumber(String phoneNumber); String getPhoneNumber(Integer patientId); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index bcfa9b55..6899ce89 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -33,10 +33,10 @@ public String getPatientUuidWithHealthId(String healthId) { } @Override - public List getPatientsWithPhoneNumber(String []phoneNumberFormats) { + public List getPatientsWithPhoneNumber(String phoneNumber) { Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Patient.class); criteria.createCriteria("attributes", "pa") - .add(Restrictions.in("pa.value", phoneNumberFormats)); + .add(Restrictions.eq("pa.value", phoneNumber)); return criteria.list(); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 03a8521a..0e972541 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -25,15 +25,7 @@ public ExistingPatientService(PatientService patientService, ExistingPatientDao } public List getMatchingPatients(String phoneNumber) { - final int PHONE_NUMBER_LENGTH = 10; - final int NUMBER_OF_PHONE_NUMBER_FORMATS = 4; - String phoneNumberWithOutCode = phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH); - String []formats = new String[NUMBER_OF_PHONE_NUMBER_FORMATS]; - formats[0] = "+91-" + phoneNumberWithOutCode; - formats[1] = "91" + phoneNumberWithOutCode; - formats[2] = phoneNumberWithOutCode; - formats[3] = "+91" + phoneNumberWithOutCode; - return existingPatientDao.getPatientsWithPhoneNumber(formats); + return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber); } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { From ddd54e8d337a129048eb6a4734fb7b6547858c36 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 24 Aug 2021 11:06:02 +0530 Subject: [PATCH 116/264] 248|Tazeen/Nazeer| Refactors checking visit start date instead of date of enrollment of the program (#30) --- .../hip/api/dao/impl/EncounterDaoImpl.java | 211 +++++++++++------- 1 file changed, 136 insertions(+), 75 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index 921b8782..aadc64d7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -12,9 +12,9 @@ @Repository public class EncounterDaoImpl implements EncounterDao { - private static final String RADIOLOGY_TYPE = "6"; - private static final String PATIENT_DOCUMENT_TYPE = "9"; - private static final String DOCUMENT_TYPE = "35"; + private static final String RADIOLOGY_TYPE = "RADIOLOGY"; + private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; + private static final String DOCUMENT_TYPE = "Document"; private SessionFactory sessionFactory; @Autowired @@ -40,81 +40,142 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { "\tand v.date_started between :fromDate and :toDate\n" + "\tand v.patient_id = (select person_id from person as p2 where p2.uuid = :patientUUID);"; - private String sqlGetEncounterIdsForProgramForPrescriptions = "select\n" + - "\tle.encounter_id\n" + + private String sqlGetEncounterIdsForProgramForPrescriptions = "SELECT\n" + + " le.encounter_id\n" + + "FROM\n" + + " patient_program AS pp\n" + + " INNER JOIN program AS p ON pp.program_id = p.program_id\n" + + " INNER JOIN (\n" + + " SELECT\n" + + " ee.episode_id,\n" + + " ee.encounter_id,\n" + + " epp.patient_program_id,\n" + + " v.date_started\n" + + " FROM\n" + + " episode_encounter AS ee\n" + + " INNER JOIN episode_patient_program AS epp ON ee.episode_id = epp.episode_id\n" + + " INNER JOIN encounter AS e ON e.encounter_id = ee.encounter_id\n" + + " INNER JOIN visit AS v ON v.visit_id = e.visit_id\n" + + " ) AS le ON le.patient_program_id = pp.patient_program_id\n" + + "WHERE\n" + + " p.name = :programName\n" + + " AND pp.patient_id = (\n" + + " SELECT\n" + + " person_id\n" + + " FROM\n" + + " person AS p2\n" + + " WHERE\n" + + " p2.uuid = :patientUUID\n" + + " )\n" + + " AND pp.patient_program_id IN (\n" + + " SELECT\n" + + " patient_program_id\n" + + " FROM\n" + + " program_attribute_type AS pat\n" + + " INNER JOIN patient_program_attribute AS ppa ON pat.program_attribute_type_id = ppa.attribute_type_id\n" + + " WHERE\n" + + " name = \"ID_Number\"\n" + + " AND value_reference = :programEnrollmentId\n" + + " )\n" + + " AND le.date_started BETWEEN :fromDate AND :toDate ;\n"; + + private String sqlGetEncounterIdsForVisitForDiagnosticReports = "select\n" + + " e.encounter_id\n" + "from\n" + - "\tpatient_program as pp\n" + - "inner join program as p on\n" + - "\tpp.program_id = p.program_id\n" + - "inner join (\n" + - "\tselect\n" + - "\t\tee.episode_id,\n" + - "\t\tee.encounter_id,\n" + - "\t\tepp.patient_program_id\n" + - "\tfrom\n" + - "\t\tepisode_encounter as ee\n" + - "\tinner join episode_patient_program as epp on\n" + - "\t\tee.episode_id = epp.episode_id) as le on\n" + - "\tle.patient_program_id = pp.patient_program_id\n" + + " visit as v\n" + + " inner join visit_type as vt on vt.visit_type_id = v.visit_type_id\n" + + " inner join encounter as e on e.visit_id = v.visit_id\n" + + " inner join obs o on o.encounter_id = e.encounter_id\n" + + " inner join encounter_type as et on et.encounter_type_id = e.encounter_type\n" + + " inner join concept_name as cn on cn.concept_id = o.concept_id\n" + "where\n" + - "\tp.name = :programName \n" + - "\tand pp.patient_id = (select person_id from person as p2 where p2.uuid = :patientUUID)\n" + - "\tand pp.patient_program_id in (\n" + - "\tselect\n" + - "\t\tpatient_program_id\n" + - "\tfrom\n" + - "\t\tprogram_attribute_type as pat\n" + - "\tinner join patient_program_attribute as ppa on\n" + - "\t\tpat.program_attribute_type_id = ppa.attribute_type_id\n" + - "\twhere\n" + - "\t\tname = \"ID_Number\"\n" + - "\t\tand value_reference = :programEnrollmentId )\n" + - "\tand pp.date_enrolled between :fromDate and :toDate ;"; - - private String sqlGetEncounterIdsForVisitForDiagnosticReports = "select \n" + - " e.encounter_id \n" + - " from \n" + - " visit as v \n" + - " inner join visit_type as vt on \n" + - " \tvt.visit_type_id = v.visit_type_id \n" + - " inner join encounter as e on \n" + - " \te.visit_id = v.visit_id\n" + - " inner join obs o on \n" + - " \to.encounter_id = e.encounter_id \n" + + " (\n" + + " et.name ='" + RADIOLOGY_TYPE + "' or et.name = '" + PATIENT_DOCUMENT_TYPE + "'\n" + + " )\n" + + " and vt.name = :visit\n" + + " and cn.name = '" + DOCUMENT_TYPE + "'\n" + + " and o.void_reason is null\n" + + " and e.encounter_id not in (\n" + + " SELECT\n" + + " encounter_id\n" + + " from\n" + + " encounter e\n" + + " where\n" + + " e.visit_id in (\n" + + " SELECT\n" + + " visit_id\n" + + " from\n" + + " encounter e2\n" + + " inner join episode_encounter ee on e2.encounter_id = ee.encounter_id\n" + + " )\n" + + " )\n" + + " and v.date_started between :fromDate\n" + + " and :toDate\n" + + " and v.patient_id = (\n" + + " select\n" + + " person_id\n" + + " from\n" + + " person as p2\n" + + " where\n" + + " p2.uuid = :patientUUID\n" + + " );"; + + private String sqlGetEncounterIdsForProgramForDiagnosticReports = "SELECT\n" + + " res.encounter_id\n" + + "FROM\n" + + " (\n" + + " SELECT\n" + + " *\n" + + " from(\n" + + " SELECT\n" + + " o.encounter_id,\n" + + " p.uuid AS person_uuid,\n" + + " p2.name AS pro_name,\n" + + " ppa.value_reference,\n" + + " pp.date_enrolled,\n" + + " o.concept_id AS obs_concept_id,\n" + + " o.value_text,\n" + + " o.void_reason AS obs_void_reason\n" + + " from\n" + + " obs o\n" + + " inner join person p on p.person_id = o.person_id\n" + + " inner join patient_program pp on pp.patient_id = p.person_id\n" + + " inner join program p2 on p2.program_id = pp.program_id\n" + + " inner join patient_program_attribute ppa on ppa.patient_program_id = pp.patient_program_id\n" + + " where\n" + + " encounter_id in (\n" + + " SELECT\n" + + " encounter_id\n" + + " from\n" + + " encounter e\n" + + " inner join encounter_type as et on et.encounter_type_id = e.encounter_type\n" + " where\n" + - " (e.encounter_type =" + RADIOLOGY_TYPE + " or e.encounter_type =" + PATIENT_DOCUMENT_TYPE + ") \n" + - " and vt.name = :visit\n" + - " and o.concept_id =" + DOCUMENT_TYPE + "\n" + - " and o.void_reason is null\n" + - " and e.encounter_id not in ( \n" + - " SELECT encounter_id from encounter e where e.visit_id in (SELECT visit_id from encounter e2 \n" + - " inner join episode_encounter ee on e2.encounter_id = ee.encounter_id)) \n" + - " and v.date_started between :fromDate and :toDate \n" + - " and v.patient_id = (select person_id from person as p2 where p2.uuid = :patientUUID) ;"; - - private String sqlGetEncounterIdsForProgramForDiagnosticReports = "SELECT encounter_id from \n" + - " (SELECT o.encounter_id,p.uuid,p2.name,ppa.value_reference,pp.date_enrolled,o.concept_id, \n" + - " o.value_text,o.void_reason from obs o \n" + - " inner join person p on \n" + - " p.person_id = o.person_id \n" + - " inner join patient_program pp on \n" + - " pp.patient_id = p.person_id \n" + - " inner join program p2 on \n" + - " p2.program_id = pp.program_id \n" + - " inner join patient_program_attribute ppa on \n" + - " ppa.patient_program_id = pp.patient_program_id \n" + - " where encounter_id in \n" + - " (SELECT encounter_id from encounter e where (e.encounter_type =" + RADIOLOGY_TYPE + - " or e.encounter_type =" + PATIENT_DOCUMENT_TYPE + ") and visit_id in \n" + - " (SELECT visit_id from encounter e2 \n" + - " inner join episode_encounter ee on \n" + - " e2.encounter_id = ee.encounter_id ))) as t \n" + - " where concept_id=" + DOCUMENT_TYPE + " \n" + - " and void_reason is null \n" + - " and uuid = :patientUUID \n" + - " and name= :programName \n" + - " and value_reference = :programEnrollmentId \n" + - " and date_enrolled between :fromDate and :toDate ;"; + " (\n" + + " et.name = '" + RADIOLOGY_TYPE + "'\n" + + " or et.name = '" + PATIENT_DOCUMENT_TYPE + "'\n" + + " )\n" + + " and visit_id in (\n" + + " SELECT\n" + + " visit_id\n" + + " from\n" + + " encounter e2\n" + + " inner join episode_encounter ee on e2.encounter_id = ee.encounter_id\n" + + " )\n" + + " )\n" + + " ) as t\n" + + " INNER JOIN concept_name AS cn ON cn.concept_id = t.obs_concept_id\n" + + " WHERE\n" + + " name = '" + DOCUMENT_TYPE + "'\n" + + " and obs_void_reason is null\n" + + " and person_uuid = :patientUUID\n" + + " and pro_name = :programName\n" + + " and value_reference = :programEnrollmentId\n" + + " ) as res\n" + + " inner join encounter as e on e.encounter_id = res.encounter_id\n" + + " inner join visit as v on v.visit_id = e.visit_id\n" + + "where\n" + + " date_started between :fromDate\n" + + " and :toDate ;\n"; @Override public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date fromDate, Date toDate) { From 5634744ccbd44f293a229972dd4e268887fa929f Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 24 Aug 2021 11:06:40 +0530 Subject: [PATCH 117/264] 321|Nazeer|Swati| Adds catching the null pointer exception (#37) --- .../java/org/bahmni/module/hip/web/model/FhirLabResult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 87770c82..f5de4a95 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -90,7 +90,7 @@ private static void mapToObsFromLabResult(LabOrderResult result, Patient patient try { float f = result.getResult()!=null? Float.parseFloat(result.getResult()): (float) 0; obs.setValue(new Quantity().setValue(f).setUnit(result.getTestUnitOfMeasurement())); - } catch (NumberFormatException ex ) { + } catch (NumberFormatException | NullPointerException ex) { obs.setValue(new StringType().setValue(result.getResult())); } obs.setStatus(Observation.ObservationStatus.FINAL); From 9fcc3eb992aa7ab27ab69ec2dcad7ef3302bf79d Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Tue, 24 Aug 2021 12:30:37 +0530 Subject: [PATCH 118/264] 320|Nazeer| Refactors exisiting patient API to use bahmni core search for seraching existing patient records --- .../hip/web/controller/PatientController.java | 1 + .../web/service/ExistingPatientService.java | 85 ++++++++++++------- 2 files changed, 55 insertions(+), 31 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 5ec69906..cc8780b8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -17,6 +17,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; + import java.util.List; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 0e972541..19f509e4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -1,27 +1,34 @@ package org.bahmni.module.hip.web.service; -import org.apache.commons.lang.StringUtils; +import org.bahmni.module.bahmnicore.contract.patient.response.PatientResponse; +import org.bahmni.module.bahmnicore.dao.PatientDao; import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.bahmni.module.hip.web.model.ExistingPatient; import org.openmrs.Patient; +import org.openmrs.api.LocationService; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Calendar; +import java.util.Date; import java.util.List; @Service public class ExistingPatientService { - private final PatientService patientService; private final ExistingPatientDao existingPatientDao; static final int MATCHING_CRITERIA_CONSTANT = 2; + private final PatientDao patientDao; + private final PatientService patientService; + private final LocationService locationService; @Autowired - public ExistingPatientService(PatientService patientService, ExistingPatientDao existingPatientDao) { + public ExistingPatientService(PatientDao patientDao, PatientService patientService, ExistingPatientDao existingPatientDao, LocationService locationService) { + this.patientDao = patientDao; this.patientService = patientService; this.existingPatientDao = existingPatientDao; + this.locationService = locationService; } public List getMatchingPatients(String phoneNumber) { @@ -29,9 +36,18 @@ public List getMatchingPatients(String phoneNumber) { } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { - List patientsMatchedWithName = filterPatientsByName(patientName); + List patients = getPatients(patientName, patientYearOfBirth, patientGender); + List existingPatients = new ArrayList<>(); + for (PatientResponse patient : patients) { + existingPatients.add(patientService.getPatientByUuid(patient.getUuid())); + } + return existingPatients; + } + + private List getPatients(String patientName, int patientYearOfBirth, String patientGender) { + List patientsMatchedWithName = filterPatientsByName(patientName); if (patientsMatchedWithName.size() != 1) { - List patientsMatchedWithNameAndAge = filterPatientsByAge(patientYearOfBirth, patientsMatchedWithName); + List patientsMatchedWithNameAndAge = filterPatientsByAge(patientYearOfBirth, patientsMatchedWithName); if (patientsMatchedWithNameAndAge.size() != 1) return filterPatientsByGender(patientGender, patientsMatchedWithNameAndAge); return patientsMatchedWithNameAndAge; @@ -39,43 +55,36 @@ public List getMatchingPatients(String patientName, int patientYearOfBi return patientsMatchedWithName; } - private List filterPatientsByName(String patientName) { - List existingPatients = patientService.getAllPatients(); - List patients = new ArrayList<>(); - for (Patient patient : existingPatients) { - String givenName = patientName.split(" ")[0].toLowerCase(); - String familyName = patientName.split(" ")[1].toLowerCase(); - int distanceOfGivenName = StringUtils.getLevenshteinDistance(givenName, patient.getGivenName().toLowerCase()); - int distanceOfFamilyName = StringUtils.getLevenshteinDistance(familyName, patient.getFamilyName().toLowerCase()); - if (distanceOfGivenName <= MATCHING_CRITERIA_CONSTANT - && (distanceOfFamilyName <= MATCHING_CRITERIA_CONSTANT - || patient.getFamilyName().charAt(0) == patientName.split(" ")[1].charAt(0))) - patients.add(patient); - } - return patients; + private List filterPatientsByName(String patientName) { + return patientDao.getPatients("", patientName, null, null, "", 100, 0, + null, "", null, null, null, + locationService.getLocation("Registration Desk").getUuid(), false, false); } - private List filterPatientsByAge(int patientYearOfBirth, List patientsMatchedWithNameAndGender) { - List patients = new ArrayList<>(); - for (Patient patient : patientsMatchedWithNameAndGender) { - if (verifyYearOfBirth(getYearOfBirth(patient.getAge()), patientYearOfBirth)) { + + private List filterPatientsByAge(int patientYearOfBirth, List patientsMatchedWithNameAndGender) { + List patients = new ArrayList<>(); + for (PatientResponse patient : patientsMatchedWithNameAndGender) { + if (verifyYearOfBirth(getYearOfBirth(patient.getBirthDate()), patientYearOfBirth)) { patients.add(patient); } } return patients; } - private Integer getYearOfBirth(int age) { - return Calendar.getInstance().get(Calendar.YEAR) - age; + private Integer getYearOfBirth(Date birthDate) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(birthDate); + return calendar.get(Calendar.YEAR); } private boolean verifyYearOfBirth(int yearOfBirth, int patientYearOfBirth) { return yearOfBirth == patientYearOfBirth || Math.abs(yearOfBirth - patientYearOfBirth) <= MATCHING_CRITERIA_CONSTANT; } - private List filterPatientsByGender(String patientGender, List patientMatchedWithName) { - List patients = new ArrayList<>(); - for (Patient patient : patientMatchedWithName) { + private List filterPatientsByGender(String patientGender, List patientMatchedWithName) { + List patients = new ArrayList<>(); + for (PatientResponse patient : patientMatchedWithName) { if (patient.getGender().equals(patientGender)) patients.add(patient); } @@ -86,14 +95,28 @@ public List getMatchingPatientDetails(List matchingPat List existingPatients = new ArrayList<>(); for (Patient patient : matchingPatients) { existingPatients.add( - new ExistingPatient(patient.getGivenName() + " " + patient.getFamilyName(), - getYearOfBirth(patient.getAge()).toString(), + new ExistingPatient( + patient.getGivenName() + " " + patient.getFamilyName(), + getYearOfBirth(patient.getBirthdate()).toString(), getAddress(patient), - patient.getGender(), patient.getUuid(), existingPatientDao.getPhoneNumber(patient.getPatientId()))); + patient.getGender(), + patient.getUuid(), + getPhoneNumber(patient)) + ); } return existingPatients; } + private String getPhoneNumber(Patient patient) { + String phoneNumber = ""; + try { + phoneNumber = patient.getAttribute("primaryContact").getValue(); + } catch (NullPointerException ignored) { + + } + return phoneNumber; + } + private String getAddress(Patient patient) { if (patient.getPersonAddress() != null) { return patient.getPersonAddress().getAddress1() + From cd86bc4a2fdca0b69a6794112878b736fdafbeb7 Mon Sep 17 00:00:00 2001 From: Mahesh Ippili <74229437+Mahesh-I@users.noreply.github.com> Date: Tue, 24 Aug 2021 14:32:05 +0530 Subject: [PATCH 119/264] 125 op consult (#33) * 125-[Mahesh|Rohit] Adds adds api for OPConsult CareContext * 125-[Mahesh|Rohit] Adds adds Medicalhistory to the OPConsult CareContext * 125-[Mahesh|Rohit] Adds physical examinations to OPConsults * 125-[Mahesh|Rohit] Refactors modifies structure of the OPConsult bundle * 125-[Mahesh|Rohit][WIP] Adds logs in OPConsults * 125-[Mahesh|Rohit] Fixes the query to get all the medical history * 125-[Mahesh|Rohit] Adds tests for OPConsultation controller * 277-[Mahesh|Rohit] Adds includes diagnosis and active conditions in medical history * 277-[Mahesh|Rohit] Fixes resolves review comments * 277-[Mahesh|Rohit|Sameera] Adds includes medication in OPD notes * 125-[Mahesh|Rohit|Sameera] Adds includes procedures in the OPConsultation notes * 125-[Mahesh|Rohit|Sameera] Adds includes patient documents in OPConsult * 125-[Mahesh|Rohit|Sameera] Refactors removes in the OpenMrs OpConsult Model * 125-[Mahesh|Rohit|Sameera] Refactors translates from native sql query to hibernate query * 125-[Mahesh|Rohit|Sameera] Refactors translates native query to hibernated query api * 125-[Rohit|Sameera] Refactors translates native query in get procedure notes to hibernated query api * 125-[Mahesh|Rohit|Sameera] Refactors translates physicalExamination native query to hibernate criteria * 125-[Mahesh|Rohit|Sameera] Refactors adds author information to bundle * 125-[Mahesh|Rohit|Sameera] Fixes adds medication name to the bundle * 125-[Mahesh|Rohit|Sameera] Refactors changing native sql queries to openmrs APIs * 125-[Rohit|Sameera] Refactors translates hibernate queries in api calls to get procedure notes * 125-[Rohit|Sameera] Refactors translates hibernate queries in api calls to get chief complaints * 125-[Rohit|Sameera] Refactors translates hibernate queries in api calls to get physical examination * 125-[Rohit|Sameera] Refactors translates hibernate queries in api calls to get medical history conditions * 125-[Rohit|Sameera] Refactors adds import files instead of wild card(*) Co-authored-by: Rohit Yawalkar Co-authored-by: rohit-yawalkar <82825674+rohit-yawalkar@users.noreply.github.com> --- api/pom.xml | 11 +- .../module/hip/api/dao/OPConsultDao.java | 18 ++ .../hip/api/dao/impl/OPConsultDaoImpl.java | 153 +++++++++++++ omod/pom.xml | 10 + .../web/controller/OPConsultController.java | 55 +++++ .../web/model/BundledOPConsultResponse.java | 14 ++ .../module/hip/web/model/DrugOrders.java | 4 + .../module/hip/web/model/FhirOPConsult.java | 203 ++++++++++++++++++ .../module/hip/web/model/OPConsultBundle.java | 18 ++ .../hip/web/model/OpenMrsCondition.java | 27 +++ .../hip/web/model/OpenMrsOPConsult.java | 151 +++++++++++++ .../web/service/DiagnosticReportService.java | 2 +- .../hip/web/service/FHIRResourceMapper.java | 50 ++++- .../module/hip/web/service/FHIRUtils.java | 54 +++++ .../service/FhirBundledOPConsultBuilder.java | 37 ++++ .../hip/web/service/OPConsultService.java | 147 +++++++++++++ .../module/hip/web/TestConfiguration.java | 10 +- .../controller/OPConsultControllerTest.java | 108 ++++++++++ pom.xml | 10 + 19 files changed, 1068 insertions(+), 14 deletions(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/BundledOPConsultResponse.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/OPConsultBundle.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsCondition.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledOPConsultBuilder.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java create mode 100644 omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java diff --git a/api/pom.xml b/api/pom.xml index 1f1cfc09..b9621101 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -19,7 +19,16 @@ 2.1.1 provided - + + org.openmrs.module + emrapi-api + provided + + + org.openmrs.module + emrapi-omod + provided + org.projectlombok lombok diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java new file mode 100644 index 00000000..9f9680e4 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -0,0 +1,18 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Patient; +import org.openmrs.module.emrapi.conditionslist.Condition; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +public interface OPConsultDao { + List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate); + Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate); + List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); + List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); + List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java new file mode 100644 index 00000000..393282c3 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -0,0 +1,153 @@ +package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.api.dao.OPConsultDao; +import org.openmrs.*; +import org.openmrs.api.EncounterService; +import org.openmrs.api.ObsService; +import org.openmrs.module.emrapi.conditionslist.Condition; +import org.openmrs.module.emrapi.conditionslist.ConditionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; +import java.util.*; +import java.util.stream.Collectors; + +@Repository +public class OPConsultDaoImpl implements OPConsultDao { + public static final String CHIEF_COMPLAINT = "Chief Complaint"; + public static final String PROCEDURE_NOTES = "Procedure Notes, Procedure"; + public static final String CONSULTATION = "Consultation"; + private static final String CODED_DIAGNOSIS = "Coded Diagnosis"; + public static final String OPD = "OPD"; + private final ObsService obsService; + private final ConditionService conditionService; + private final EncounterService encounterService; + + + @Autowired + public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService) { + this.obsService = obsService; + this.conditionService = conditionService; + this.encounterService = encounterService; + } + + + @Override + public List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient); + List chiefComplaintObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) + && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) + && o.getValueCoded() != null + && o.getConcept().getName().getLocalePreferred() + ) + { + chiefComplaintObsMap.add(o); + } + } + return chiefComplaintObsMap; + } + + @Override + public Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate) { + final String conditionStatusHistoryOf = "HISTORY_OF"; + final String conditionStatusActive = "ACTIVE"; + List encounters = encounterService.getEncountersByPatient(patient) + .stream() + .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation") && + encounter.getDateCreated().after(fromDate) && + encounter.getDateCreated().before(toDate) && + Objects.equals(encounter.getVisit().getVisitType().getName(), OPD)) + .collect(Collectors.toList()); + List conditions = conditionService.getActiveConditions(patient) + .stream() + .filter(condition -> condition.getStatus().name().equals(conditionStatusActive) || + condition.getStatus().name().equals(conditionStatusHistoryOf)) + .collect(Collectors.toList()); + + Map> encounterConditionsMap = new HashMap<>(); + + for(Condition condition : conditions){ + for(Encounter encounter : encounters){ + Encounter nextEncounter; + Date nextEncounterDate = new Date(); + if(encounters.indexOf(encounter) < (encounters.size() - 1)){ + nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); + nextEncounterDate = nextEncounter.getDateCreated(); + } + if (condition.getDateCreated().equals(encounter.getDateCreated()) || condition.getDateCreated().after(encounter.getDateCreated()) && condition.getDateCreated().before(nextEncounterDate)) { + if (encounterConditionsMap.containsKey(encounter)) { + encounterConditionsMap.get(encounter).add(condition); + } else { + encounterConditionsMap.put(encounter, new ArrayList() {{ + add(condition); + }}); + } + } + } + } + return encounterConditionsMap; + } + + @Override + public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient); + List medicalHistoryDiagnosisObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) + && Objects.equals(o.getConcept().getName().getName(), CODED_DIAGNOSIS) + ) + { + medicalHistoryDiagnosisObsMap.add(o); + } + } + return medicalHistoryDiagnosisObsMap; + } + + @Override + public List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate) { + final String[] formNames = new String[]{"Discharge Summary","Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", + "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; + List patientObs = obsService.getObservationsByPerson(patient); + List physicalExaminationObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) + && o.getValueCoded() == null + && o.getConcept().getName().getLocalePreferred() + && o.getObsGroup() == null + && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) + ) + { + physicalExaminationObsMap.add(o); + } + } + return physicalExaminationObsMap; + } + + @Override + public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient); + List proceduresObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) + && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + && !o.getVoided() + ) + { + proceduresObsMap.add(o); + } + } + return proceduresObsMap; + } +} diff --git a/omod/pom.xml b/omod/pom.xml index 4fe415bd..fc56ae97 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -115,6 +115,16 @@ 2.3.0 test + + org.openmrs.module + emrapi-api + provided + + + org.openmrs.module + emrapi-omod + provided + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java new file mode 100644 index 00000000..eb8841ef --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -0,0 +1,55 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.client.ClientError; +import org.bahmni.module.hip.web.model.BundledOPConsultResponse; +import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.OPConsultBundle; +import org.bahmni.module.hip.web.service.OPConsultService; +import org.bahmni.module.hip.web.service.ValidationService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.text.ParseException; +import java.util.List; + +import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/opConsults") +@RestController +public class OPConsultController extends BaseRestController { + private final OPConsultService opConsultService; + private final ValidationService validationService; + + @Autowired + public OPConsultController(OPConsultService opConsultService, ValidationService validationService) { + this.opConsultService = opConsultService; + this.validationService = validationService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity get(@RequestParam String patientId, + @RequestParam String visitType, + @RequestParam String fromDate, + @RequestParam String toDate) throws ParseException { + if (patientId == null || patientId.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + if (visitType == null || visitType.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (!validationService.isValidVisit(visitType)) + return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); + if (!validationService.isValidPatient(patientId)) + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + List opConsultBundle = + opConsultService.getOpConsultsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(new BundledOPConsultResponse(opConsultBundle)); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledOPConsultResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledOPConsultResponse.java new file mode 100644 index 00000000..344c2ed0 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledOPConsultResponse.java @@ -0,0 +1,14 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@AllArgsConstructor +@Getter +@Setter +public class BundledOPConsultResponse { + private List opConsults; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java index f5dfabbf..a87fdcef 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/DrugOrders.java @@ -47,4 +47,8 @@ private Encounter firstEncounter() { Stream stream(){ return openMRSDrugOrders.stream(); } + + public List getOpenMRSDrugOrders() { + return openMRSDrugOrders; + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java new file mode 100644 index 00000000..c302c13b --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -0,0 +1,203 @@ +package org.bahmni.module.hip.web.model; + +import org.bahmni.module.hip.web.service.FHIRResourceMapper; +import org.bahmni.module.hip.web.service.FHIRUtils; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Reference; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.Medication; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Procedure; +import org.hl7.fhir.r4.model.DocumentReference; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Composition; +import org.openmrs.EncounterProvider; + +import java.util.List; +import java.util.Date; +import java.util.Objects; +import java.util.UUID; +import java.util.Set; +import java.util.stream.Collectors; + +public class FhirOPConsult { + private final List chiefComplaints; + private final List medicalHistory; + private final Date encounterTimestamp; + private final Integer encounterID; + private final Encounter encounter; + private final List practitioners; + private final Patient patient; + private final Reference patientReference; + private final List observations; + private final List medicationRequests; + private final List medications; + private final Procedure procedure; + private final List patientDocuments; + + public FhirOPConsult(List chiefComplaints, + List medicalHistory, Date encounterTimestamp, + Integer encounterID, + Encounter encounter, + List practitioners, + Patient patient, + Reference patientReference, + List observations, + List medicationRequests, List medications, Procedure procedure, List patientDocuments) { + this.chiefComplaints = chiefComplaints; + this.medicalHistory = medicalHistory; + this.encounterTimestamp = encounterTimestamp; + this.encounterID = encounterID; + this.encounter = encounter; + this.practitioners = practitioners; + this.patient = patient; + this.patientReference = patientReference; + this.observations = observations; + this.medicationRequests = medicationRequests; + this.medications = medications; + this.procedure = procedure; + this.patientDocuments = patientDocuments; + } + + public Bundle bundleOPConsult(String webUrl) { + String bundleID = String.format("PR-%d", encounterID); + Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); + FHIRUtils.addToBundleEntry(bundle, practitioners, false); + FHIRUtils.addToBundleEntry(bundle, patient, false); + FHIRUtils.addToBundleEntry(bundle, encounter, false); + FHIRUtils.addToBundleEntry(bundle, chiefComplaints, false); + FHIRUtils.addToBundleEntry(bundle, medicalHistory, false); + FHIRUtils.addToBundleEntry(bundle, observations, false); + FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); + FHIRUtils.addToBundleEntry(bundle, medications, false); + if (procedure != null) FHIRUtils.addToBundleEntry(bundle, procedure, false); + FHIRUtils.addToBundleEntry(bundle, patientDocuments, false); + return bundle; + } + + public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsult, FHIRResourceMapper fhirResourceMapper) { + Patient patient = fhirResourceMapper.mapToPatient(openMrsOPConsult.getPatient()); + Reference patientReference = FHIRUtils.getReferenceToResource(patient); + Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsOPConsult.getEncounter()); + Date encounterDatetime = openMrsOPConsult.getEncounter().getEncounterDatetime(); + Integer encounterId = openMrsOPConsult.getEncounter().getId(); + List medicationRequestsList = openMrsOPConsult.getDrugOrders().stream(). + map(fhirResourceMapper::mapToMedicationRequest).collect(Collectors.toList()); + List medications = openMrsOPConsult.getDrugOrders().stream().map(fhirResourceMapper::mapToMedication). + filter(medication -> !Objects.isNull(medication)).collect(Collectors.toList()); + List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsOPConsult.getEncounter().getEncounterProviders()); + List fhirChiefComplaintConditionList = openMrsOPConsult.getChiefComplaintConditions().stream(). + map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List fhirMedicalHistoryList = openMrsOPConsult.getMedicalHistoryConditions().stream(). + map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List fhirObservationList = openMrsOPConsult.getObservations().stream(). + map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); + Procedure procedure = openMrsOPConsult.getProcedure() != null ? + fhirResourceMapper.mapToProcedure(openMrsOPConsult.getProcedure()) : null; + List patientDocuments = openMrsOPConsult.getPatientDocuments().stream(). + map(fhirResourceMapper::mapToDocumentDocumentReference).collect(Collectors.toList()); + + return new FhirOPConsult(fhirChiefComplaintConditionList, fhirMedicalHistoryList, + encounterDatetime, encounterId, encounter, practitioners, patient, patientReference, fhirObservationList, medicationRequestsList, medications, procedure, patientDocuments); + } + + private Composition compositionFrom(String webURL) { + Composition composition = initializeComposition(encounterTimestamp, webURL); + composition + .setEncounter(FHIRUtils.getReferenceToResource(encounter)) + .setSubject(patientReference); + + practitioners + .forEach(practitioner -> composition + .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); + + if (patientDocuments.size() > 0) { + Composition.SectionComponent patientDocumentsCompositionSection = composition.addSection(); + patientDocumentsCompositionSection + .setTitle("Patient Document") + .setCode(FHIRUtils.getPatientDocumentType()); + patientDocuments + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(patientDocumentsCompositionSection::addEntry); + } + + if (procedure != null) { + Composition.SectionComponent procedureCompositionSection = composition.addSection(); + procedureCompositionSection + .setTitle("Procedure") + .setCode(FHIRUtils.getProcedureType()); + + procedureCompositionSection.addEntry(FHIRUtils.getReferenceToResource(procedure)); + } + + if(medicationRequests.size() > 0){ + Composition.SectionComponent medicationRequestsCompositionSection = composition.addSection(); + medicationRequestsCompositionSection + .setTitle("Medication request") + .setCode(FHIRUtils.getPrescriptionType()); + medicationRequests + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(medicationRequestsCompositionSection::addEntry); + } + + if (chiefComplaints.size() > 0){ + Composition.SectionComponent chiefComplaintsCompositionSection = composition.addSection(); + chiefComplaintsCompositionSection + .setTitle("Chief complaint") + .setCode(FHIRUtils.getChiefComplaintType()); + chiefComplaints + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(chiefComplaintsCompositionSection::addEntry); + } + + if (medicalHistory.size() > 0) { + Composition.SectionComponent medicalHistoryCompositionSection = composition.addSection(); + medicalHistoryCompositionSection + .setTitle("Medical history") + .setCode(FHIRUtils.getMedicalHistoryType()); + medicalHistory + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(medicalHistoryCompositionSection::addEntry); + } + + if (observations.size() > 0) { + Composition.SectionComponent physicalExaminationsCompositionSection = composition.addSection(); + physicalExaminationsCompositionSection + .setTitle("Physical examination") + .setCode(FHIRUtils.getPhysicalExaminationType()); + observations + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(physicalExaminationsCompositionSection::addEntry); + } + + return composition; + } + + private Composition initializeComposition(Date encounterTimestamp, String webURL) { + Composition composition = new Composition(); + composition.setId(UUID.randomUUID().toString()); + composition.setDate(encounterTimestamp); + composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "Composition")); + composition.setStatus(Composition.CompositionStatus.FINAL); + composition.setType(FHIRUtils.getOPConsultType()); + composition.setTitle("OP Consultation Document"); + return composition; + } + + private static List getPractitionersFrom(FHIRResourceMapper fhirResourceMapper, Set encounterProviders) { + return encounterProviders + .stream() + .map(fhirResourceMapper::mapToPractitioner) + .collect(Collectors.toList()); + } + +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OPConsultBundle.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OPConsultBundle.java new file mode 100644 index 00000000..d198cbb0 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OPConsultBundle.java @@ -0,0 +1,18 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.bahmni.module.hip.web.model.serializers.FhirBundleSerializer; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.hl7.fhir.r4.model.Bundle; + +@Getter +@Setter +@Builder +public class OPConsultBundle { + private CareContext careContext; + + @JsonSerialize(using = FhirBundleSerializer.class) + private Bundle bundle; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsCondition.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsCondition.java new file mode 100644 index 00000000..bdf71dcb --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsCondition.java @@ -0,0 +1,27 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Getter; + +import java.util.Date; + +@Getter +public class OpenMrsCondition { + private final String name; + private final String uuid; + private final Date recordedDate; + + public OpenMrsCondition(String uuid, String name, Date recordedDate) { + this.uuid = uuid; + this.name = name; + this.recordedDate = recordedDate; + } + + @Override + public String toString() { + return "OpenMrsCondition{" + + "name='" + name + '\'' + + ", uuid='" + uuid + '\'' + + ", recordedDate=" + recordedDate + + '}'; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java new file mode 100644 index 00000000..87141608 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java @@ -0,0 +1,151 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Getter; +import org.openmrs.*; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Getter +public class OpenMrsOPConsult { + private final Encounter encounter; + private final List chiefComplaintConditions; + private final List medicalHistoryConditions; + private final List observations; + private final Patient patient; + private final Set encounterProviders; + private final List drugOrders; + private final Obs procedure; + private final List patientDocuments; + + public OpenMrsOPConsult(Encounter encounter, + List chiefComplaintConditions, + List medicalHistoryConditions, + List observations, + Patient patient, + Set encounterProviders, + List drugOrders, Obs procedure, List patientDocuments) { + this.encounter = encounter; + this.chiefComplaintConditions = chiefComplaintConditions; + this.medicalHistoryConditions = medicalHistoryConditions; + this.observations = observations; + this.patient = patient; + this.encounterProviders = encounterProviders; + this.drugOrders = drugOrders; + this.procedure = procedure; + this.patientDocuments = patientDocuments; + } + + public static List getOpenMrsOPConsultList(Map> encounterChiefComplaintsMap, + Map> encounterMedicalHistoryMap, + Map> encounterPhysicalExaminationMap, + Map encounteredDrugOrdersMap, + Map encounterProcedureMap, + Map> encounterPatientDocumentsMap, + Patient patient) { + List openMrsOPConsultList = new ArrayList<>(); + + for(Map.Entry entry : encounteredDrugOrdersMap.entrySet()){ + List drugOrdersList = encounteredDrugOrdersMap.get(entry.getKey()).getOpenMRSDrugOrders(); + + List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); + patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; + + List medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, entry.getKey()); + medicalHistoryList = medicalHistoryList == null ? new ArrayList<>() : medicalHistoryList; + + List physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, entry.getKey()); + physicalExaminationList = physicalExaminationList == null ? new ArrayList<>() : physicalExaminationList; + + List chiefComplaintList = getEncounterConditions(encounterChiefComplaintsMap, entry.getKey()); + chiefComplaintList = chiefComplaintList == null ? new ArrayList<>() : chiefComplaintList; + + Obs procedure = getEncounterObsProcedure(encounterProcedureMap, entry.getKey()); + + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), chiefComplaintList, medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), drugOrdersList, procedure, patientDocumentsList)); + } + + for (Map.Entry> entry : encounterChiefComplaintsMap.entrySet()) { + List chiefComplaintList = encounterChiefComplaintsMap.get(entry.getKey()); + + List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); + patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; + + List medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, entry.getKey()); + medicalHistoryList = medicalHistoryList == null ? new ArrayList<>() : medicalHistoryList; + + List physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, entry.getKey()); + physicalExaminationList = physicalExaminationList == null ? new ArrayList<>() : physicalExaminationList; + + Obs procedure = getEncounterObsProcedure(encounterProcedureMap, entry.getKey()); + + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), chiefComplaintList, medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList)); + } + + for (Map.Entry> entry : encounterMedicalHistoryMap.entrySet()) { + List medicalHistoryList = encounterMedicalHistoryMap.get(entry.getKey()); + + List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); + patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; + + List physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, entry.getKey()); + physicalExaminationList = physicalExaminationList == null ? new ArrayList<>() : physicalExaminationList; + + Obs procedure = getEncounterObsProcedure(encounterProcedureMap, entry.getKey()); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList)); + } + + for (Map.Entry> entry : encounterPhysicalExaminationMap.entrySet()) { + List physicalExaminationList = encounterPhysicalExaminationMap.get(entry.getKey()); + + List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); + patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; + + Obs procedure = getEncounterObsProcedure(encounterProcedureMap, entry.getKey()); + + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList)); + } + + for (Map.Entry entry : encounterProcedureMap.entrySet()) { + List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); + patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; + + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), entry.getValue(), patientDocumentsList)); + } + + for (Map.Entry> entry : encounterPatientDocumentsMap.entrySet()) { + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), null, encounterPatientDocumentsMap.get(entry.getKey()))); + } + + return openMrsOPConsultList; + } + + public static List getEncounterObs(Map> map, Encounter encounter) { + if (map.containsKey(encounter)) { + List obsList = map.get(encounter); + map.remove(encounter); + return obsList; + } + return null; + } + + public static List getEncounterConditions(Map> map, Encounter encounter) { + if (map.containsKey(encounter)) { + List conditionList = map.get(encounter); + map.remove(encounter); + return conditionList; + } + return null; + } + + public static Obs getEncounterObsProcedure(Map map, Encounter encounter) { + if (map.containsKey(encounter)) { + Obs obs = map.get(encounter); + map.remove(encounter); + return obs; + } + return null; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 9c293fd6..0bad9135 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -75,7 +75,7 @@ public List getDiagnosticReportsForVisit(String patientU .collect(Collectors.toList()); } - private HashMap> getAllObservationsForVisits(Date fromDate, Date toDate, + public HashMap> getAllObservationsForVisits(Date fromDate, Date toDate, Patient patient, String visitType) { HashMap> encounterListMap = new HashMap<>(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 5cfbcd92..fd79c1f7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,14 +1,7 @@ package org.bahmni.module.hip.web.service; -import org.hl7.fhir.r4.model.Attachment; -import org.hl7.fhir.r4.model.DiagnosticReport; -import org.hl7.fhir.r4.model.Dosage; -import org.hl7.fhir.r4.model.Encounter; -import org.hl7.fhir.r4.model.Medication; -import org.hl7.fhir.r4.model.MedicationRequest; -import org.hl7.fhir.r4.model.Observation; -import org.hl7.fhir.r4.model.Patient; -import org.hl7.fhir.r4.model.Practitioner; +import org.bahmni.module.hip.web.model.OpenMrsCondition; +import org.hl7.fhir.r4.model.*; import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; import org.openmrs.Obs; @@ -79,6 +72,25 @@ public DiagnosticReport mapToDiagnosticReport(Obs obs) { } } + public DocumentReference mapToDocumentDocumentReference(Obs obs) { + DocumentReference documentReference = new DocumentReference(); + documentReference.setId(obs.getUuid()); + List contents = new ArrayList<>(); + try { + List attachments = getAttachments(obs); + for (Attachment attachment : attachments) { + DocumentReference.DocumentReferenceContentComponent documentReferenceContentComponent + = new DocumentReference.DocumentReferenceContentComponent(); + documentReferenceContentComponent.setAttachment(attachment); + contents.add(documentReferenceContentComponent); + } + documentReference.setContent(contents); + return documentReference; + } catch (IOException exception) { + return documentReference; + } + } + private List getAttachments(Obs obs) throws IOException { List attachments = new ArrayList<>(); Attachment attachment = new Attachment(); @@ -106,10 +118,30 @@ else if(encounterId.equals(RADIOLOGY_TYPE)) return attachments; } + public Condition mapToCondition(OpenMrsCondition openMrsCondition) { + Condition condition = new Condition(); + CodeableConcept concept = new CodeableConcept(); + concept.setText(openMrsCondition.getName()); + condition.setCode(concept); + condition.setId(openMrsCondition.getUuid()); + condition.setRecordedDate(openMrsCondition.getRecordedDate()); + return condition; + } + public Observation mapToObs(Obs obs) { return observationTranslator.toFhirResource(obs); } + public Procedure mapToProcedure(Obs obs) { + Procedure procedure = new Procedure(); + procedure.setStatus(Procedure.ProcedureStatus.COMPLETED); + CodeableConcept concept = new CodeableConcept(); + concept.setText(obs.getValueCoded().getDisplayString()); + procedure.setCode(concept); + procedure.setId(obs.getUuid()); + return procedure; + } + private String getTypeOfTheObsDocument(String valueText) { if (valueText == null) return ""; String extension = valueText.substring(valueText.indexOf('.') + 1); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 624ee8cc..235e5d13 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -72,6 +72,60 @@ public static CodeableConcept getDiagnosticReportType() { return type; } + public static CodeableConcept getPatientDocumentType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("371530004"); + coding.setDisplay("Clinical consultation report"); + return type; + } + + public static CodeableConcept getOPConsultType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("371530004"); + coding.setDisplay("Clinical consultation report"); + return type; + } + + public static CodeableConcept getChiefComplaintType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("422843007"); + coding.setDisplay("Chief complaint"); + return type; + } + + public static CodeableConcept getMedicalHistoryType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("422843008"); // don't know + coding.setDisplay("Medical history"); + return type; + } + + public static CodeableConcept getPhysicalExaminationType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("425044008"); // don't know + coding.setDisplay("Physical examination"); + return type; + } + + public static CodeableConcept getProcedureType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("36969009"); + coding.setDisplay("Procedure"); + return type; + } + public static void addToBundleEntry(Bundle bundle, Resource resource, boolean useIdPart) { String resourceType = resource.getResourceType().toString(); String id = useIdPart ? resource.getIdElement().getIdPart() : resource.getId(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledOPConsultBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledOPConsultBuilder.java new file mode 100644 index 00000000..1512ae35 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledOPConsultBuilder.java @@ -0,0 +1,37 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.web.model.*; +import org.hl7.fhir.r4.model.Bundle; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class FhirBundledOPConsultBuilder { + private final CareContextService careContextService; + private final OrganizationContextService organizationContextService; + private final FHIRResourceMapper fhirResourceMapper; + + @Autowired + public FhirBundledOPConsultBuilder(CareContextService careContextService, OrganizationContextService organizationContextService, FHIRResourceMapper fhirResourceMapper) { + this.careContextService = careContextService; + this.organizationContextService = organizationContextService; + this.fhirResourceMapper = fhirResourceMapper; + } + + public OPConsultBundle fhirBundleResponseFor (OpenMrsOPConsult openMrsOPConsult) { + + OrganizationContext organizationContext = organizationContextService.buildContext(); + + Bundle opConsultBundle = FhirOPConsult.fromOpenMrsOPConsult(openMrsOPConsult, fhirResourceMapper). + bundleOPConsult(organizationContext.webUrl()); + + CareContext careContext = careContextService.careContextFor( + openMrsOPConsult.getEncounter(), + organizationContext.careContextType()); + + return OPConsultBundle.builder() + .bundle(opConsultBundle) + .careContext(careContext) + .build(); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java new file mode 100644 index 00000000..ba4072e6 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -0,0 +1,147 @@ +package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.api.dao.OPConsultDao; +import org.bahmni.module.hip.web.model.OPConsultBundle; +import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.OpenMrsCondition; +import org.bahmni.module.hip.web.model.DrugOrders; +import org.bahmni.module.hip.web.model.OpenMrsOPConsult; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Patient; +import org.openmrs.api.PatientService; +import org.openmrs.module.emrapi.conditionslist.Condition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + +@Service +public class OPConsultService { + public static Set conceptNames = new HashSet<>(Arrays.asList("Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", + "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", + "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Nutrition, Bal Vita Provided by FCHV","Bal Vita Provided by FCHV","ART, Condoms given","HIVTC, Marital Status","Malaria, Contact number", + "HIVTC, Transferred out", "HIVTC, Regimen when transferred out", "HIVTC, Date of transferred out", "HIVTC, Transferred out to", "HIVTC, Chief Complaint")); + + private final FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder; + private final OPConsultDao opConsultDao; + private final PatientService patientService; + private final OpenMRSDrugOrderClient openMRSDrugOrderClient; + private final DiagnosticReportService diagnosticReportService; + + @Autowired + public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, OPConsultDao opConsultDao, + PatientService patientService, OpenMRSDrugOrderClient openMRSDrugOrderClient, + DiagnosticReportService diagnosticReportService) { + this.fhirBundledOPConsultBuilder = fhirBundledOPConsultBuilder; + this.opConsultDao = opConsultDao; + this.patientService = patientService; + this.openMRSDrugOrderClient = openMRSDrugOrderClient; + this.diagnosticReportService = diagnosticReportService; + } + + public List getOpConsultsForVisit(String patientUuid, DateRange dateRange, String visitType) { + Date fromDate = dateRange.getFrom(); + Date toDate = dateRange.getTo(); + Patient patient = patientService.getPatientByUuid(patientUuid); + + Map> encounterChiefComplaintsMap = getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); + Map> encounterMedicalHistoryMap = getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); + Map> encounterPhysicalExaminationMap = getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); + Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); + Map> encounterPatientDocumentsMap = getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); + + List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, + encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, + encounterPatientDocumentsMap, patient); + + return openMrsOPConsultList.stream(). + map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); + } + + private Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { + final int patientDocumentEncounterType = 9; + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); + Map> encounterPatientDocumentsMap = new HashMap<>(); + for (Encounter e : encounterDiagnosticReportsMap.keySet()) { + List patientDocuments = e.getAllObs().stream(). + filter(o -> (o.getEncounter().getEncounterType().getEncounterTypeId() == patientDocumentEncounterType && o.getValueText() == null)) + .collect(Collectors.toList()); + if (patientDocuments.size() > 0) { + encounterPatientDocumentsMap.put(e, patientDocuments); + } + } + return encounterPatientDocumentsMap; + } + + private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List obsProcedures = opConsultDao.getProcedures(patient, visitType, fromDate, toDate); + Map encounterProcedureMap = new HashMap<>(); + for(Obs o: obsProcedures){ + encounterProcedureMap.put(o.getEncounter(), o); + } + return encounterProcedureMap; + } + + private Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List physicalExaminations = opConsultDao.getPhysicalExamination(patient, visitType, fromDate, toDate); + Map> encounterPhysicalExaminationMap = new HashMap<>(); + for (Obs physicalExamination : physicalExaminations) { + Encounter encounter = physicalExamination.getEncounter(); + List groupMembers = new ArrayList<>(); + getGroupMembersOfObs(physicalExamination, groupMembers); + if (!encounterPhysicalExaminationMap.containsKey(encounter)) { + encounterPhysicalExaminationMap.put(encounter, new ArrayList<>()); + } + encounterPhysicalExaminationMap.get(encounter).addAll(groupMembers); + } + return encounterPhysicalExaminationMap; + } + + private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { + if (physicalExamination.getGroupMembers().size() > 0) { + for (Obs groupMember : physicalExamination.getGroupMembers()) { + if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; + getGroupMembersOfObs(groupMember, groupMembers); + } + } else { + groupMembers.add(physicalExamination); + } + } + + private Map> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List chiefComplaints = opConsultDao.getChiefComplaints(patient, visitType, fromDate, toDate); + HashMap> encounterChiefComplaintsMap = new HashMap<>(); + + for (Obs o : chiefComplaints) { + if(!encounterChiefComplaintsMap.containsKey(o.getEncounter())){ + encounterChiefComplaintsMap.put(o.getEncounter(), new ArrayList<>()); + } + encounterChiefComplaintsMap.get(o.getEncounter()).add(new OpenMrsCondition(o.getUuid(), o.getValueCoded().getDisplayString(), o.getDateCreated())); + } + return encounterChiefComplaintsMap; + } + + private Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); + Map> encounterMedicalHistoryMap = new HashMap<>(); + + for(Map.Entry> medicalHistory : medicalHistoryConditionsMap.entrySet()){ + if (!encounterMedicalHistoryMap.containsKey(medicalHistory.getKey())){ + encounterMedicalHistoryMap.put(medicalHistory.getKey(), new ArrayList<>()); + } + for(Condition condition : medicalHistory.getValue()){ + encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConcept().getDisplayString(), condition.getDateCreated())); + } + } + for(Obs obs : medicalHistoryDiagnosisMap){ + if (!encounterMedicalHistoryMap.containsKey(obs.getEncounter())){ + encounterMedicalHistoryMap.put(obs.getEncounter(), new ArrayList<>()); + } + encounterMedicalHistoryMap.get(obs.getEncounter()).add(new OpenMrsCondition(obs.getUuid(), obs.getValueCoded().getDisplayString(), obs.getDateCreated())); + } + return encounterMedicalHistoryMap; + } +} diff --git a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java index 22bf2d8d..e505fae7 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/TestConfiguration.java @@ -1,11 +1,12 @@ package org.bahmni.module.hip.web; -import org.bahmni.module.hip.web.service.BundleMedicationRequestService; -import org.bahmni.module.hip.web.service.CareContextService; -import org.bahmni.module.hip.web.service.DiagnosticReportService; import org.bahmni.module.hip.web.service.ExistingPatientService; import org.bahmni.module.hip.web.service.PrescriptionService; import org.bahmni.module.hip.web.service.ValidationService; +import org.bahmni.module.hip.web.service.CareContextService; +import org.bahmni.module.hip.web.service.BundleMedicationRequestService; +import org.bahmni.module.hip.web.service.DiagnosticReportService; +import org.bahmni.module.hip.web.service.OPConsultService; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @@ -44,4 +45,7 @@ public DiagnosticReportService diagnosticReportService() { public ExistingPatientService existingPatientService() { return mock(ExistingPatientService.class); } + + @Bean + public OPConsultService opConsultService() {return mock(OPConsultService.class);} } \ No newline at end of file diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java new file mode 100644 index 00000000..3ead53b4 --- /dev/null +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java @@ -0,0 +1,108 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.service.OPConsultService; +import org.bahmni.module.hip.web.service.ValidationService; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.MediaType; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.test.web.servlet.MockMvc; +import org.springframework.test.web.servlet.MvcResult; +import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import org.springframework.test.web.servlet.setup.MockMvcBuilders; +import org.springframework.web.context.WebApplicationContext; + +import static java.util.Collections.EMPTY_LIST; +import static org.junit.Assert.*; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.when; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration(classes = {OPConsultController.class, TestConfiguration.class}) +@WebAppConfiguration +public class OPConsultControllerTest { + private MockMvc mockMvc; + + @Autowired + private WebApplicationContext wac; + + @Autowired + private OPConsultService opConsultService; + + @Autowired + private ValidationService validationService; + + @Before + public void setup() { + DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); + this.mockMvc = builder.build(); + } + + @Test + public void shouldReturn200ForVisits() throws Exception { + when(validationService.isValidVisit("IPD")).thenReturn(true); + when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + .thenReturn(EMPTY_LIST); + + mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) + .param("visitType", "IPD") + .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") + .param("fromDate", "2020-01-01") + .param("toDate", "2020-01-31") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isOk()); + } + + @Test + public void shouldReturn400OnInvalidVisitType() throws Exception { + when(validationService.isValidVisit("OP")).thenReturn(false); + when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + .thenReturn(EMPTY_LIST); + + mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) + .param("visitType", "OP") + .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") + .param("fromDate", "2020-01-01") + .param("toDate", "2020-01-31") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + public void shouldReturn400OnInvalidPatientId() throws Exception { + when(validationService.isValidVisit("IPD")).thenReturn(true); + when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + .thenReturn(EMPTY_LIST); + + mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) + .param("visitType", "IPD") + .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745") + .param("fromDate", "2020-01-01") + .param("toDate", "2020-01-31") + .accept(MediaType.APPLICATION_JSON)) + .andExpect(status().isBadRequest()); + } + + @Test + public void shouldReturn500ForMissingFieldForVisit() throws Exception { + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) + .param("fromDate", "2020-01-01") + .param("toDate", "2020-01-31") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + + assertEquals(500, mvcResult.getResponse().getStatus()); + } +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 02594fbf..2b89ed5e 100644 --- a/pom.xml +++ b/pom.xml @@ -62,6 +62,16 @@ + + org.openmrs.module + emrapi-api + 1.32.0 + + + org.openmrs.module + emrapi-omod + 1.32.0 + org.openmrs.api openmrs-api From 77f86c3c5d8a7ccd50dc04b1ca6f561503787a88 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Tue, 24 Aug 2021 14:49:24 +0530 Subject: [PATCH 120/264] 319|Nazeer| Refactors getting both records of the phone number match and fuzzy logic in the API response --- .../module/hip/web/controller/PatientController.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 5ec69906..5dc98684 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -36,13 +36,11 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat @RequestParam String patientGender, @RequestParam String phoneNumber) { List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber); + matchingPatients.addAll(existingPatientService.getMatchingPatients(patientName, + Integer.parseInt(patientYearOfBirth), patientGender)); if (matchingPatients.size() == 0) { - matchingPatients = existingPatientService.getMatchingPatients(patientName, - Integer.parseInt(patientYearOfBirth), patientGender); - if (matchingPatients.size() == 0) { - return ResponseEntity.ok().body(new ErrorRepresentation(new Error( - ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); - } + return ResponseEntity.ok().body(new ErrorRepresentation(new Error( + ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); } List existingPatients = existingPatientService.getMatchingPatientDetails(matchingPatients); return ResponseEntity.ok() From ec31af12420fafc42746e583af8b5b10bf93c971 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Tue, 24 Aug 2021 16:05:52 +0530 Subject: [PATCH 121/264] 144|Nazeer|Refactors get the records with any phone number format --- .../bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 2 +- .../bahmni/module/hip/web/service/ExistingPatientService.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index 6899ce89..f76fa069 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -36,7 +36,7 @@ public String getPatientUuidWithHealthId(String healthId) { public List getPatientsWithPhoneNumber(String phoneNumber) { Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Patient.class); criteria.createCriteria("attributes", "pa") - .add(Restrictions.eq("pa.value", phoneNumber)); + .add(Restrictions.like("pa.value", "%" + phoneNumber)); return criteria.list(); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 0e972541..baf29cd6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -17,6 +17,7 @@ public class ExistingPatientService { private final PatientService patientService; private final ExistingPatientDao existingPatientDao; static final int MATCHING_CRITERIA_CONSTANT = 2; + static final int PHONE_NUMBER_LENGTH = 10; @Autowired public ExistingPatientService(PatientService patientService, ExistingPatientDao existingPatientDao) { @@ -25,7 +26,7 @@ public ExistingPatientService(PatientService patientService, ExistingPatientDao } public List getMatchingPatients(String phoneNumber) { - return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber); + return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber.substring(phoneNumber.length()-PHONE_NUMBER_LENGTH)); } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { From 4921dc0fea3cc4fef0f0114ba9cb412ef63b7060 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Tue, 24 Aug 2021 16:09:28 +0530 Subject: [PATCH 122/264] 144|Nazeer| Removed the code which is not related --- .../module/hip/web/controller/PatientController.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 5dc98684..5ec69906 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -36,11 +36,13 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat @RequestParam String patientGender, @RequestParam String phoneNumber) { List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber); - matchingPatients.addAll(existingPatientService.getMatchingPatients(patientName, - Integer.parseInt(patientYearOfBirth), patientGender)); if (matchingPatients.size() == 0) { - return ResponseEntity.ok().body(new ErrorRepresentation(new Error( - ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + matchingPatients = existingPatientService.getMatchingPatients(patientName, + Integer.parseInt(patientYearOfBirth), patientGender); + if (matchingPatients.size() == 0) { + return ResponseEntity.ok().body(new ErrorRepresentation(new Error( + ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); + } } List existingPatients = existingPatientService.getMatchingPatientDetails(matchingPatients); return ResponseEntity.ok() From ab9c9c73bc21717bf3a8dbc484bd01b2075ee90b Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Wed, 25 Aug 2021 10:16:47 +0530 Subject: [PATCH 123/264] 320|Nazeer|Refactors Replace Magic Number with Symbolic Constant --- .../bahmni/module/hip/web/controller/PatientController.java | 1 - .../module/hip/web/service/ExistingPatientService.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index cc8780b8..5ec69906 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -17,7 +17,6 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; - import java.util.List; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 19f509e4..dd2ab180 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -22,6 +22,8 @@ public class ExistingPatientService { private final PatientDao patientDao; private final PatientService patientService; private final LocationService locationService; + private static final String REGISTRATION_DESK = "Registration Desk"; + private static final String PRIMARY_CONTACT = "primaryContact"; @Autowired public ExistingPatientService(PatientDao patientDao, PatientService patientService, ExistingPatientDao existingPatientDao, LocationService locationService) { @@ -58,7 +60,7 @@ private List getPatients(String patientName, int patientYearOfB private List filterPatientsByName(String patientName) { return patientDao.getPatients("", patientName, null, null, "", 100, 0, null, "", null, null, null, - locationService.getLocation("Registration Desk").getUuid(), false, false); + locationService.getLocation(REGISTRATION_DESK).getUuid(), false, false); } @@ -110,7 +112,7 @@ public List getMatchingPatientDetails(List matchingPat private String getPhoneNumber(Patient patient) { String phoneNumber = ""; try { - phoneNumber = patient.getAttribute("primaryContact").getValue(); + phoneNumber = patient.getAttribute(PRIMARY_CONTACT).getValue(); } catch (NullPointerException ignored) { } From 91c1fa7c636676d8f1140d73b304b725d248fa79 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Wed, 25 Aug 2021 11:11:12 +0530 Subject: [PATCH 124/264] 290|Nazeer|Adds getting the matching records with the middle name --- .../bahmni/module/hip/web/service/ExistingPatientService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index dd2ab180..9e9ad091 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -98,7 +98,7 @@ public List getMatchingPatientDetails(List matchingPat for (Patient patient : matchingPatients) { existingPatients.add( new ExistingPatient( - patient.getGivenName() + " " + patient.getFamilyName(), + patient.getGivenName() + " " + patient.getMiddleName() + " " + patient.getFamilyName(), getYearOfBirth(patient.getBirthdate()).toString(), getAddress(patient), patient.getGender(), From a77efb7f2808daf41f5070cd019b7c9f7e9dbbd1 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Wed, 25 Aug 2021 16:47:54 +0530 Subject: [PATCH 125/264] 144|Nazeer|Removed unnecessary code --- .../module/hip/web/controller/PatientController.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 5ec69906..5dc98684 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -36,13 +36,11 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat @RequestParam String patientGender, @RequestParam String phoneNumber) { List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber); + matchingPatients.addAll(existingPatientService.getMatchingPatients(patientName, + Integer.parseInt(patientYearOfBirth), patientGender)); if (matchingPatients.size() == 0) { - matchingPatients = existingPatientService.getMatchingPatients(patientName, - Integer.parseInt(patientYearOfBirth), patientGender); - if (matchingPatients.size() == 0) { - return ResponseEntity.ok().body(new ErrorRepresentation(new Error( - ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); - } + return ResponseEntity.ok().body(new ErrorRepresentation(new Error( + ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); } List existingPatients = existingPatientService.getMatchingPatientDetails(matchingPatients); return ResponseEntity.ok() From 8debedab4837627307cc600b6b67717bda0ccac4 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Tue, 31 Aug 2021 16:14:36 +0530 Subject: [PATCH 126/264] 279|Nazeer|Sameera| Adds skipping the patient if the patient already associated with healthId (#43) --- .../api/dao/impl/ExistingPatientDaoImpl.java | 4 +-- .../hip/web/controller/PatientController.java | 5 ++-- .../web/service/ExistingPatientService.java | 18 +++++++++++++ .../web/controller/PatientControllerTest.java | 26 ------------------- 4 files changed, 21 insertions(+), 32 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index c81ea419..d5f28d0e 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -69,6 +69,4 @@ public String getPatientHealthIdWithPatientId(Integer patientId) { List healthIds = query.list(); return healthIds.size() > 0 ? healthIds.get(0) : null; } -} - -x \ No newline at end of file +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 5dc98684..8d4cabaf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -35,9 +35,8 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat @RequestParam String patientYearOfBirth, @RequestParam String patientGender, @RequestParam String phoneNumber) { - List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber); - matchingPatients.addAll(existingPatientService.getMatchingPatients(patientName, - Integer.parseInt(patientYearOfBirth), patientGender)); + List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber,patientName, + Integer.parseInt(patientYearOfBirth), patientGender); if (matchingPatients.size() == 0) { return ResponseEntity.ok().body(new ErrorRepresentation(new Error( ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 815316e0..d8a4d852 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -24,6 +24,7 @@ public class ExistingPatientService { private final LocationService locationService; private static final String REGISTRATION_DESK = "Registration Desk"; private static final String PRIMARY_CONTACT = "primaryContact"; + private static final String HEALTH_ID = "Health ID"; static final int PHONE_NUMBER_LENGTH = 10; @Autowired @@ -34,6 +35,23 @@ public ExistingPatientService(PatientDao patientDao, PatientService patientServi this.locationService = locationService; } + public List getMatchingPatients(String phoneNumber, String patientName, int patientYearOfBirth, String patientGender) { + List matchingPatients = getMatchingPatients(phoneNumber); + matchingPatients.addAll(getMatchingPatients(patientName, patientYearOfBirth, patientGender)); + matchingPatients.removeIf(patient -> !getHealthId(patient).equals("")); + return matchingPatients; + } + + public String getHealthId(Patient patient) { + String healthId = ""; + try { + healthId = patient.getPatientIdentifier(HEALTH_ID).getIdentifier(); + } catch (NullPointerException ignored) { + + } + return healthId; + } + public List getMatchingPatients(String phoneNumber) { return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH)); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 8c62eecb..debc2e4e 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -99,32 +99,6 @@ public void shouldReturnNoRecordsWhenNoMatchingPatientFound() throws Exception { mvcResult.getResponse().getContentAsString()); } - @Test - public void shouldReturnPatientRecordWhenMatchingPatientFoundWithPhoneNumber() throws Exception { - Patient patient = mock(Patient.class); - List patients = new ArrayList<>(); - patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc", "9123456780"); - List existingPatients = new ArrayList<>(); - existingPatients.add(existingPatient); - when(existingPatientService.getMatchingPatients("+91-9876543210")) - .thenReturn(patients); - when(existingPatientService.getMatchingPatientDetails(patients)) - .thenReturn(Collections.singletonList(existingPatient)); - - MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients", RestConstants.VERSION_1)) - .param("patientName", "sam tom") - .param("patientYearOfBirth", "1985") - .param("patientGender", "M") - .param("phoneNumber", "+91-9876543210") - .accept(MediaType.APPLICATION_JSON)) - .andReturn(); - ObjectMapper objectMapper = new ObjectMapper(); - String value = objectMapper.writeValueAsString(existingPatients); - assertEquals(value, - mvcResult.getResponse().getContentAsString()); - } - @Test public void shouldReturnPatientUuidWhenTheHealthIdIsLinkedToAPatient() throws Exception { when(existingPatientService.getPatientWithHealthId("abc.xyz@sbx")).thenReturn("bd27cbfd-b395-4a8a-af71-b27535b85e31"); From 2d2ade45b58758d378709041e624a54e036d2708 Mon Sep 17 00:00:00 2001 From: rohit-yawalkar <82825674+rohit-yawalkar@users.noreply.github.com> Date: Thu, 2 Sep 2021 15:48:59 +0530 Subject: [PATCH 127/264] 125-[Rohit|Tazeen] WIP - Adds PHR Address in identifier type table (#44) --- api/src/main/resources/liquibase.xml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 23cf38ff..a0527879 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -55,7 +55,27 @@ update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'Health ID') where property = 'bahmni.extraPatientIdentifierTypes'; - + + + + select count(*) from patient_identifier_type where name='PHR Address' + + Adding PHR Address Identifier type + + insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'PHR Address','PHR Address identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; + + + + + + select count(*) from patient_identifier_type where name='PHR Address' + + Adding PHR Address Identifier type + + update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'PHR Address') where property = 'bahmni.extraPatientIdentifierTypes'; + + + From 41654f2c2ade8ee12ea900f69bb5cdc6e4ad66d3 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Sun, 5 Sep 2021 20:27:28 +0530 Subject: [PATCH 128/264] 346|Sameera|Nazeer|Fixes duplicate patients issue (#45) --- .../module/hip/web/controller/PatientController.java | 3 ++- .../module/hip/web/service/ExistingPatientService.java | 9 ++++++--- .../module/hip/web/controller/PatientControllerTest.java | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 8d4cabaf..a01fa8af 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.PathVariable; import java.util.List; +import java.util.Set; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip") @RestController @@ -35,7 +36,7 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat @RequestParam String patientYearOfBirth, @RequestParam String patientGender, @RequestParam String phoneNumber) { - List matchingPatients = existingPatientService.getMatchingPatients(phoneNumber,patientName, + Set matchingPatients = existingPatientService.getMatchingPatients(phoneNumber,patientName, Integer.parseInt(patientYearOfBirth), patientGender); if (matchingPatients.size() == 0) { return ResponseEntity.ok().body(new ErrorRepresentation(new Error( diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index d8a4d852..d7d7d077 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -13,7 +13,9 @@ import java.util.ArrayList; import java.util.Calendar; import java.util.Date; +import java.util.HashSet; import java.util.List; +import java.util.Set; @Service public class ExistingPatientService { @@ -35,8 +37,9 @@ public ExistingPatientService(PatientDao patientDao, PatientService patientServi this.locationService = locationService; } - public List getMatchingPatients(String phoneNumber, String patientName, int patientYearOfBirth, String patientGender) { - List matchingPatients = getMatchingPatients(phoneNumber); + public Set getMatchingPatients(String phoneNumber, String patientName, int patientYearOfBirth, String patientGender) { + Set matchingPatients = new HashSet<>(); + matchingPatients.addAll(getMatchingPatients(phoneNumber)); matchingPatients.addAll(getMatchingPatients(patientName, patientYearOfBirth, patientGender)); matchingPatients.removeIf(patient -> !getHealthId(patient).equals("")); return matchingPatients; @@ -112,7 +115,7 @@ private List filterPatientsByGender(String patientGender, List< return patients; } - public List getMatchingPatientDetails(List matchingPatients) { + public List getMatchingPatientDetails(Set matchingPatients) { List existingPatients = new ArrayList<>(); for (Patient patient : matchingPatients) { existingPatients.add( diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index debc2e4e..1c1013f3 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -26,6 +26,7 @@ import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; import java.util.List; import static org.mockito.Matchers.anyInt; @@ -58,13 +59,12 @@ public void shouldReturn200OKWhenMatchingPatientFound() throws Exception { Patient patient = mock(Patient.class); List patients = new ArrayList<>(); patients.add(patient); - ExistingPatient existingPatient = new ExistingPatient("sam tom", "35", "null, null", "M", "3f81c3b4-04fc-4311-9b50-b863fbe023dc", "9123456780"); when(existingPatientService.getMatchingPatients("+91-9876543210")) .thenReturn(new ArrayList<>()); when(existingPatientService.getMatchingPatients(anyString(), anyInt(), anyString())) .thenReturn(patients); - when(existingPatientService.getMatchingPatientDetails(patients)) + when(existingPatientService.getMatchingPatientDetails(new HashSet<>(patients))) .thenReturn(Collections.singletonList(existingPatient)); mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients", RestConstants.VERSION_1)) From de382d18888c0551761970b41ff09e2347207e78 Mon Sep 17 00:00:00 2001 From: rohit-yawalkar <82825674+rohit-yawalkar@users.noreply.github.com> Date: Wed, 8 Sep 2021 14:19:21 +0530 Subject: [PATCH 129/264] 125-[Rohit|Tazeen] Adds Lab and Radiology orders in opd notes (#47) --- .../module/hip/api/dao/OPConsultDao.java | 2 ++ .../hip/api/dao/impl/OPConsultDaoImpl.java | 24 +++++++++++++- .../module/hip/web/model/FhirOPConsult.java | 30 +++++++++++++++--- .../hip/web/model/OpenMrsOPConsult.java | 31 ++++++++++++++----- .../hip/web/service/FHIRResourceMapper.java | 25 ++++++++++++++- .../module/hip/web/service/FHIRUtils.java | 9 ++++++ .../hip/web/service/OPConsultService.java | 25 +++++++++++++-- 7 files changed, 129 insertions(+), 17 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index 9f9680e4..2a1e0a62 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -4,6 +4,7 @@ import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.module.emrapi.conditionslist.Condition; +import org.openmrs.Order; import java.util.Date; import java.util.List; @@ -15,4 +16,5 @@ public interface OPConsultDao { List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + List getOrders(Patient patient, String visit, Date fromDate, Date toDate); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 393282c3..205bf472 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -6,6 +6,7 @@ import org.openmrs.module.emrapi.conditionslist.Condition; import org.openmrs.module.emrapi.conditionslist.ConditionService; import org.springframework.beans.factory.annotation.Autowired; +import org.openmrs.api.OrderService; import org.springframework.stereotype.Repository; import java.util.*; import java.util.stream.Collectors; @@ -17,16 +18,21 @@ public class OPConsultDaoImpl implements OPConsultDao { public static final String CONSULTATION = "Consultation"; private static final String CODED_DIAGNOSIS = "Coded Diagnosis"; public static final String OPD = "OPD"; + public static final String ORDER_ACTION = "DISCONTINUE"; + public static final String LAB_ORDER = "Lab Order"; + public static final String RADIOLOGY_ORDER = "Radiology Order"; private final ObsService obsService; private final ConditionService conditionService; private final EncounterService encounterService; + private final OrderService orderService; @Autowired - public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService) { + public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService, OrderService orderService) { this.obsService = obsService; this.conditionService = conditionService; this.encounterService = encounterService; + this.orderService = orderService; } @@ -150,4 +156,20 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat } return proceduresObsMap; } + + private boolean matchesVisitType(String visitType, Order order) { + return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); + } + + @Override + public List getOrders(Patient patient, String visit, Date fromDate, Date toDate) { + List orders = orderService.getAllOrdersByPatient(patient); + List orderMap = orders.stream().filter(order -> matchesVisitType(visit, order)) + .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate)) + .filter(order -> order.getEncounter().getVisit().getStartDatetime().before(toDate)) + .filter(order -> order.getDateStopped() == null && order.getAction().toString()!= ORDER_ACTION) + .filter(order -> order.getOrderType().getName().equals(LAB_ORDER) || order.getOrderType().getName().equals(RADIOLOGY_ORDER)) + .collect(Collectors.toList()); + return orderMap; + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index c302c13b..0861441f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -8,14 +8,15 @@ import org.hl7.fhir.r4.model.Patient; import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.Observation; -import org.hl7.fhir.r4.model.Medication; import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Medication; import org.hl7.fhir.r4.model.Procedure; import org.hl7.fhir.r4.model.DocumentReference; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.Composition; -import org.openmrs.EncounterProvider; +import org.hl7.fhir.r4.model.ServiceRequest; +import org.openmrs.EncounterProvider; import java.util.List; import java.util.Date; import java.util.Objects; @@ -37,6 +38,7 @@ public class FhirOPConsult { private final List medications; private final Procedure procedure; private final List patientDocuments; + private final List serviceRequest; public FhirOPConsult(List chiefComplaints, List medicalHistory, Date encounterTimestamp, @@ -46,7 +48,11 @@ public FhirOPConsult(List chiefComplaints, Patient patient, Reference patientReference, List observations, - List medicationRequests, List medications, Procedure procedure, List patientDocuments) { + List medicationRequests, + List medications, + Procedure procedure, + List patientDocuments, + List serviceRequest) { this.chiefComplaints = chiefComplaints; this.medicalHistory = medicalHistory; this.encounterTimestamp = encounterTimestamp; @@ -60,6 +66,7 @@ public FhirOPConsult(List chiefComplaints, this.medications = medications; this.procedure = procedure; this.patientDocuments = patientDocuments; + this.serviceRequest = serviceRequest; } public Bundle bundleOPConsult(String webUrl) { @@ -74,6 +81,7 @@ public Bundle bundleOPConsult(String webUrl) { FHIRUtils.addToBundleEntry(bundle, observations, false); FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); FHIRUtils.addToBundleEntry(bundle, medications, false); + FHIRUtils.addToBundleEntry(bundle, serviceRequest, false); if (procedure != null) FHIRUtils.addToBundleEntry(bundle, procedure, false); FHIRUtils.addToBundleEntry(bundle, patientDocuments, false); return bundle; @@ -100,9 +108,11 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu fhirResourceMapper.mapToProcedure(openMrsOPConsult.getProcedure()) : null; List patientDocuments = openMrsOPConsult.getPatientDocuments().stream(). map(fhirResourceMapper::mapToDocumentDocumentReference).collect(Collectors.toList()); + List serviceRequest = openMrsOPConsult.getOrders().stream(). + map(fhirResourceMapper::mapToOrder).collect(Collectors.toList()); - return new FhirOPConsult(fhirChiefComplaintConditionList, fhirMedicalHistoryList, - encounterDatetime, encounterId, encounter, practitioners, patient, patientReference, fhirObservationList, medicationRequestsList, medications, procedure, patientDocuments); + return new FhirOPConsult(fhirChiefComplaintConditionList, fhirMedicalHistoryList, encounterDatetime, encounterId, encounter, practitioners, + patient, patientReference, fhirObservationList, medicationRequestsList, medications, procedure, patientDocuments, serviceRequest); } private Composition compositionFrom(String webURL) { @@ -157,6 +167,16 @@ private Composition compositionFrom(String webURL) { .forEach(chiefComplaintsCompositionSection::addEntry); } + if (serviceRequest.size() > 0) { + Composition.SectionComponent serviceRequestCompositionSection = composition.addSection(); + serviceRequestCompositionSection + .setTitle("Order") + .setCode(FHIRUtils.getOrdersType()); + serviceRequest.stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(serviceRequestCompositionSection::addEntry); + } + if (medicalHistory.size() > 0) { Composition.SectionComponent medicalHistoryCompositionSection = composition.addSection(); medicalHistoryCompositionSection diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java index 87141608..af4a725a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsOPConsult.java @@ -1,7 +1,12 @@ package org.bahmni.module.hip.web.model; import lombok.Getter; -import org.openmrs.*; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Patient; +import org.openmrs.EncounterProvider; +import org.openmrs.DrugOrder; +import org.openmrs.Order; import java.util.ArrayList; import java.util.List; @@ -19,6 +24,7 @@ public class OpenMrsOPConsult { private final List drugOrders; private final Obs procedure; private final List patientDocuments; + private final List orders; public OpenMrsOPConsult(Encounter encounter, List chiefComplaintConditions, @@ -26,7 +32,10 @@ public OpenMrsOPConsult(Encounter encounter, List observations, Patient patient, Set encounterProviders, - List drugOrders, Obs procedure, List patientDocuments) { + List drugOrders, + Obs procedure, + List patientDocuments, + List orders) { this.encounter = encounter; this.chiefComplaintConditions = chiefComplaintConditions; this.medicalHistoryConditions = medicalHistoryConditions; @@ -36,6 +45,7 @@ public OpenMrsOPConsult(Encounter encounter, this.drugOrders = drugOrders; this.procedure = procedure; this.patientDocuments = patientDocuments; + this.orders = orders; } public static List getOpenMrsOPConsultList(Map> encounterChiefComplaintsMap, @@ -44,6 +54,7 @@ public static List getOpenMrsOPConsultList(Map encounteredDrugOrdersMap, Map encounterProcedureMap, Map> encounterPatientDocumentsMap, + Map> encounterOrdersMap, Patient patient) { List openMrsOPConsultList = new ArrayList<>(); @@ -64,7 +75,7 @@ public static List getOpenMrsOPConsultList(Map())); } for (Map.Entry> entry : encounterChiefComplaintsMap.entrySet()) { @@ -81,7 +92,7 @@ public static List getOpenMrsOPConsultList(Map(), procedure, patientDocumentsList)); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), chiefComplaintList, medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList, new ArrayList<>())); } for (Map.Entry> entry : encounterMedicalHistoryMap.entrySet()) { @@ -94,7 +105,7 @@ public static List getOpenMrsOPConsultList(Map() : physicalExaminationList; Obs procedure = getEncounterObsProcedure(encounterProcedureMap, entry.getKey()); - openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList)); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), medicalHistoryList, physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList, new ArrayList<>())); } for (Map.Entry> entry : encounterPhysicalExaminationMap.entrySet()) { @@ -105,18 +116,22 @@ public static List getOpenMrsOPConsultList(Map(), new ArrayList<>(), physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList)); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), physicalExaminationList, patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), procedure, patientDocumentsList, new ArrayList<>())); } for (Map.Entry entry : encounterProcedureMap.entrySet()) { List patientDocumentsList = getEncounterObs(encounterPatientDocumentsMap, entry.getKey()); patientDocumentsList = patientDocumentsList == null ? new ArrayList<>() : patientDocumentsList; - openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), entry.getValue(), patientDocumentsList)); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), entry.getValue(), patientDocumentsList, new ArrayList<>())); } for (Map.Entry> entry : encounterPatientDocumentsMap.entrySet()) { - openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), null, encounterPatientDocumentsMap.get(entry.getKey()))); + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), null, encounterPatientDocumentsMap.get(entry.getKey()), new ArrayList<>())); + } + + for(Map.Entry> entry : encounterOrdersMap.entrySet()){ + openMrsOPConsultList.add(new OpenMrsOPConsult(entry.getKey(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), patient, entry.getKey().getEncounterProviders(), new ArrayList<>(), null, new ArrayList<>(), encounterOrdersMap.get(entry.getKey()))); } return openMrsOPConsultList; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index fd79c1f7..2d457242 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,10 +1,24 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.model.OpenMrsCondition; -import org.hl7.fhir.r4.model.*; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.DocumentReference; +import org.hl7.fhir.r4.model.Attachment; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.ServiceRequest; +import org.hl7.fhir.r4.model.Procedure; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Dosage; +import org.hl7.fhir.r4.model.Medication; import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; import org.openmrs.Obs; +import org.openmrs.Order; import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import org.openmrs.module.fhir2.api.translators.MedicationTranslator; import org.openmrs.module.fhir2.api.translators.PatientTranslator; @@ -132,6 +146,15 @@ public Observation mapToObs(Obs obs) { return observationTranslator.toFhirResource(obs); } + public ServiceRequest mapToOrder(Order order){ + ServiceRequest serviceRequest = new ServiceRequest(); + CodeableConcept concept = new CodeableConcept(); + concept.setText(order.getConcept().getDisplayString()); + serviceRequest.setCode(concept); + serviceRequest.setId(order.getUuid()); + return serviceRequest; + } + public Procedure mapToProcedure(Obs obs) { Procedure procedure = new Procedure(); procedure.setStatus(Procedure.ProcedureStatus.COMPLETED); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 235e5d13..94532904 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -126,6 +126,15 @@ public static CodeableConcept getProcedureType() { return type; } + public static CodeableConcept getOrdersType(){ + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("721963009"); + coding.setDisplay("Order"); + return type; + } + public static void addToBundleEntry(Bundle bundle, Resource resource, boolean useIdPart) { String resourceType = resource.getResourceType().toString(); String id = useIdPart ? resource.getIdElement().getIdPart() : resource.getId(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index ba4072e6..0c54452c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -7,12 +7,20 @@ import org.bahmni.module.hip.web.model.OpenMrsOPConsult; import org.openmrs.Encounter; import org.openmrs.Obs; +import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.api.PatientService; import org.openmrs.module.emrapi.conditionslist.Condition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Set; +import java.util.HashSet; +import java.util.Arrays; +import java.util.List; +import java.util.Date; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; import java.util.stream.Collectors; @Service @@ -51,15 +59,28 @@ public List getOpConsultsForVisit(String patientUuid, DateRange Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); Map> encounterPatientDocumentsMap = getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); + Map> encounterOrdersMap = getEncounterOrdersMap(visitType, fromDate, toDate, patient); List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, - encounterPatientDocumentsMap, patient); + encounterPatientDocumentsMap, encounterOrdersMap, patient); return openMrsOPConsultList.stream(). map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } + private Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { + List orders = opConsultDao.getOrders(patient, visitType, fromDate, toDate); + Map> encounterOrdersMap = new HashMap<>(); + for(Order order : orders){ + if (!encounterOrdersMap.containsKey(order.getEncounter())) { + encounterOrdersMap.put(order.getEncounter(), new ArrayList<>()); + } + encounterOrdersMap.get(order.getEncounter()).add(order); + } + return encounterOrdersMap; + } + private Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { final int patientDocumentEncounterType = 9; Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); From 9b7e0fa2479d56e1d4e269fc39455f5202872649 Mon Sep 17 00:00:00 2001 From: Nazeer Shaik <75721600+Nazeer-debug@users.noreply.github.com> Date: Wed, 8 Sep 2021 14:47:44 +0530 Subject: [PATCH 130/264] 348 popup disappear (#46) * 346|Sameera|Nazeer|Fixes duplicate patients issue * 346|Nazeer| Adds returning spaced string when patient had no phone number --- .../bahmni/module/hip/web/service/ExistingPatientService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index d7d7d077..afd826bf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -132,7 +132,7 @@ public List getMatchingPatientDetails(Set matchingPati } private String getPhoneNumber(Patient patient) { - String phoneNumber = ""; + String phoneNumber = " "; try { phoneNumber = patient.getAttribute(PRIMARY_CONTACT).getValue(); } catch (NullPointerException ignored) { From 0c3b910c155f563f42c57f20dccace21c34e7a4d Mon Sep 17 00:00:00 2001 From: swatigogia2020 <73937345+swatigogia2020@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:14:26 +0530 Subject: [PATCH 131/264] Update liquibase.xml --- api/src/main/resources/liquibase.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index a0527879..a8aac891 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -66,7 +66,7 @@ - + select count(*) from patient_identifier_type where name='PHR Address' @@ -88,4 +88,4 @@ - \ No newline at end of file + From eb0c02a1adf75923335097479f27610ddd4d7629 Mon Sep 17 00:00:00 2001 From: Shaik Nazeer Date: Fri, 24 Sep 2021 10:54:39 +0530 Subject: [PATCH 132/264] 366|Sameera|Nazeer|Adds deleting the healthId based on the action --- .../module/hip/web/client/ClientError.java | 3 ++ .../hip/web/client/model/ErrorCode.java | 3 +- .../module/hip/web/client/model/Status.java | 7 +++++ .../hip/web/controller/PatientController.java | 9 ++++++ .../web/service/ExistingPatientService.java | 21 +++++++++++++ .../web/controller/PatientControllerTest.java | 30 +++++++++++++++++++ 6 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/client/model/Status.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java index 50e7013c..9b7f6775 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java @@ -44,5 +44,8 @@ public static ClientError noProgramIDProvided(){ public static ClientError invalidProgramName(){ return new ClientError(ErrorCode.INVALID_PROGRAM_NAME.getValue(),"Program specified does not exist"); } + public static ClientError patientIdentifierNotFound(){ + return new ClientError(ErrorCode.PATIENT_IDENTIFIER_NOT_FOUND.getValue(),"Patient identifier not found"); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java index 65fe540f..3e0cf2d9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java @@ -14,7 +14,8 @@ public enum ErrorCode { INVALID_VISIT_TYPE(1505), NO_PROGRAM_NAME_SUPPLIED (1506), NO_PROGRAM_ID_SUPPLIED(1507), - INVALID_PROGRAM_NAME(1508); + INVALID_PROGRAM_NAME(1508), + PATIENT_IDENTIFIER_NOT_FOUND(1509); private final int value; ErrorCode(int val) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/Status.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/Status.java new file mode 100644 index 00000000..256f4b2e --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/Status.java @@ -0,0 +1,7 @@ +package org.bahmni.module.hip.web.client.model; + +public enum Status { + DEACTIVATED, + REACTIVATED, + DELETED +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index a01fa8af..2e99cb03 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.controller; +import org.bahmni.module.hip.web.client.ClientError; import org.bahmni.module.hip.web.client.model.Error; import org.bahmni.module.hip.web.client.model.ErrorCode; import org.bahmni.module.hip.web.client.model.ErrorRepresentation; @@ -61,4 +62,12 @@ public ResponseEntity getExistingPatientsWithHealthId(@PathVariable String he .body(new ErrorRepresentation(new Error(ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); } } + + @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/status", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity perform(@RequestParam String healthId, @RequestParam String action) { + if (existingPatientService.getStatus(healthId, action)) return ResponseEntity.ok().body(""); + else + return ResponseEntity.ok().body(ClientError.patientIdentifierNotFound()); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index afd826bf..fcb71463 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -3,8 +3,10 @@ import org.bahmni.module.bahmnicore.contract.patient.response.PatientResponse; import org.bahmni.module.bahmnicore.dao.PatientDao; import org.bahmni.module.hip.api.dao.ExistingPatientDao; +import org.bahmni.module.hip.web.client.model.Status; import org.bahmni.module.hip.web.model.ExistingPatient; import org.openmrs.Patient; +import org.openmrs.PatientIdentifier; import org.openmrs.api.LocationService; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; @@ -55,6 +57,25 @@ public String getHealthId(Patient patient) { return healthId; } + public boolean getStatus(String healthId, String action) { + if (action.equals(Status.DELETED.toString())) { + return isHealthIdRemoved(healthId); + } + return false; + } + + private boolean isHealthIdRemoved(String healthId) { + Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); + try { + PatientIdentifier patientIdentifier = patient.getPatientIdentifier(HEALTH_ID); + patient.removeIdentifier(patientIdentifier); + patientService.purgePatientIdentifier(patientIdentifier); + return true; + } catch (NullPointerException ignored) { + return false; + } + } + public List getMatchingPatients(String phoneNumber) { return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH)); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 1c1013f3..896edf05 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import junit.framework.TestCase; import org.bahmni.module.hip.web.TestConfiguration; +import org.bahmni.module.hip.web.client.ClientError; import org.bahmni.module.hip.web.client.model.Error; import org.bahmni.module.hip.web.client.model.ErrorCode; import org.bahmni.module.hip.web.client.model.ErrorRepresentation; @@ -15,6 +16,7 @@ import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.web.WebAppConfiguration; @@ -121,4 +123,32 @@ public void shouldReturnNoPatientFoundAsResponseWhenTheHealthIdIsNotLinkedToAnyP assertEquals(value, mvcResult.getResponse().getContentAsString()); } + + @Test + public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresent() throws Exception { + when(existingPatientService.getStatus("test@sbx", "DELETED")).thenReturn(false); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) + .param("healthId", "test@sbx") + .param("action", "DELETED") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + ObjectMapper objectMapper = new ObjectMapper(); + String value = objectMapper.writeValueAsString(ClientError.patientIdentifierNotFound()); + assertEquals(value, + mvcResult.getResponse().getContentAsString()); + } + + @Test + public void shouldNotReturnErrorWhenHealthIdIsRemoved() throws Exception { + when(existingPatientService.getStatus("test@sbx", "DELETED")).thenReturn(true); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) + .param("healthId", "test@sbx") + .param("action", "DELETED") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + assertEquals("", + mvcResult.getResponse().getContentAsString()); + } } \ No newline at end of file From bb03ef89de82926b16360dd01c18241fe96175cc Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Tue, 28 Sep 2021 12:29:51 +0530 Subject: [PATCH 133/264] 367|Sameera|Nazeer|Adds deactivating the healthId based on the action --- .../web/service/ExistingPatientService.java | 20 +++++++++++-- .../web/controller/PatientControllerTest.java | 28 +++++++++++++++++++ 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index fcb71463..5f68fb43 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -29,6 +29,7 @@ public class ExistingPatientService { private static final String REGISTRATION_DESK = "Registration Desk"; private static final String PRIMARY_CONTACT = "primaryContact"; private static final String HEALTH_ID = "Health ID"; + private static final String PHR_ADDRESS = "PHR Address"; static final int PHONE_NUMBER_LENGTH = 10; @Autowired @@ -58,14 +59,27 @@ public String getHealthId(Patient patient) { } public boolean getStatus(String healthId, String action) { + Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); if (action.equals(Status.DELETED.toString())) { - return isHealthIdRemoved(healthId); + return isHealthIdRemoved(patient); + } + if (action.equals(Status.DEACTIVATED.toString())) { + return isHealthIdVoided(patient); } return false; } - private boolean isHealthIdRemoved(String healthId) { - Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); + private boolean isHealthIdVoided(Patient patient) { + try { + PatientIdentifier patientIdentifier = patient.getPatientIdentifier(PHR_ADDRESS); + patientService.voidPatientIdentifier(patientIdentifier,Status.DEACTIVATED.toString()); + return true; + } catch (NullPointerException ignored) { + return false; + } + } + + private boolean isHealthIdRemoved(Patient patient) { try { PatientIdentifier patientIdentifier = patient.getPatientIdentifier(HEALTH_ID); patient.removeIdentifier(patientIdentifier); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 896edf05..2953be97 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -139,6 +139,21 @@ public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresent() throws Ex mvcResult.getResponse().getContentAsString()); } + @Test + public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresentInDeactivation() throws Exception { + when(existingPatientService.getStatus("test@sbx", "DEACTIVATED")).thenReturn(false); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) + .param("healthId", "test@sbx") + .param("action", "DEACTIVATED") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + ObjectMapper objectMapper = new ObjectMapper(); + String value = objectMapper.writeValueAsString(ClientError.patientIdentifierNotFound()); + assertEquals(value, + mvcResult.getResponse().getContentAsString()); + } + @Test public void shouldNotReturnErrorWhenHealthIdIsRemoved() throws Exception { when(existingPatientService.getStatus("test@sbx", "DELETED")).thenReturn(true); @@ -151,4 +166,17 @@ public void shouldNotReturnErrorWhenHealthIdIsRemoved() throws Exception { assertEquals("", mvcResult.getResponse().getContentAsString()); } + + @Test + public void shouldNotReturnErrorWhenHealthIdIsDeactivated() throws Exception { + when(existingPatientService.getStatus("test@sbx", "DEACTIVATED")).thenReturn(true); + + MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) + .param("healthId", "test@sbx") + .param("action", "DEACTIVATED") + .accept(MediaType.APPLICATION_JSON)) + .andReturn(); + assertEquals("", + mvcResult.getResponse().getContentAsString()); + } } \ No newline at end of file From 7e760a29260dda5b8dff52e2738b8591e838e0a7 Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Mon, 4 Oct 2021 17:51:52 +0530 Subject: [PATCH 134/264] 368|Sameera|Nazeer| Adds. reactivate healthId based on action and refactored the code --- .../hip/web/controller/PatientController.java | 11 ++++-- .../web/service/ExistingPatientService.java | 35 ++++++++++++------- .../hip/web/service/ValidationService.java | 15 +++++++- .../web/controller/PatientControllerTest.java | 12 ++++--- .../web/service/ValidationServiceTest.java | 3 +- 5 files changed, 55 insertions(+), 21 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 2e99cb03..9c0c69e2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -6,6 +6,7 @@ import org.bahmni.module.hip.web.client.model.ErrorRepresentation; import org.bahmni.module.hip.web.model.ExistingPatient; import org.bahmni.module.hip.web.service.ExistingPatientService; +import org.bahmni.module.hip.web.service.ValidationService; import org.openmrs.Patient; import org.openmrs.module.webservices.rest.web.RestConstants; import org.springframework.beans.factory.annotation.Autowired; @@ -25,10 +26,12 @@ @RestController public class PatientController { private final ExistingPatientService existingPatientService; + private final ValidationService validationService; @Autowired - public PatientController(ExistingPatientService existingPatientService) { + public PatientController(ExistingPatientService existingPatientService, ValidationService validationService) { this.existingPatientService = existingPatientService; + this.validationService = validationService; } @RequestMapping(method = RequestMethod.GET, value = "/existingPatients", produces = MediaType.APPLICATION_JSON_VALUE) @@ -66,8 +69,10 @@ public ResponseEntity getExistingPatientsWithHealthId(@PathVariable String he @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/status", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody ResponseEntity perform(@RequestParam String healthId, @RequestParam String action) { - if (existingPatientService.getStatus(healthId, action)) return ResponseEntity.ok().body(""); - else + if(!validationService.isValidHealthId(healthId)) { return ResponseEntity.ok().body(ClientError.patientIdentifierNotFound()); + } + existingPatientService.perform(healthId, action); + return ResponseEntity.ok().body(""); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 5f68fb43..28971936 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -58,35 +58,46 @@ public String getHealthId(Patient patient) { return healthId; } - public boolean getStatus(String healthId, String action) { + public void perform(String healthId, String action) { Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); if (action.equals(Status.DELETED.toString())) { - return isHealthIdRemoved(patient); + removeHealthId(patient); } if (action.equals(Status.DEACTIVATED.toString())) { - return isHealthIdVoided(patient); + voidHealthId(patient); + } + if (action.equals(Status.REACTIVATED.toString())) { + unVoidHealthId(patient,healthId); } - return false; } - private boolean isHealthIdVoided(Patient patient) { + private void voidHealthId(Patient patient) { try { PatientIdentifier patientIdentifier = patient.getPatientIdentifier(PHR_ADDRESS); - patientService.voidPatientIdentifier(patientIdentifier,Status.DEACTIVATED.toString()); - return true; + if(!patientIdentifier.getVoided()) patientService.voidPatientIdentifier(patientIdentifier,Status.DEACTIVATED.toString()); + } catch (NullPointerException ignored) { + } + } + + private void unVoidHealthId(Patient patient,String healthId) { + Set patientIdentifiers = patient.getIdentifiers(); + try { + for (PatientIdentifier patientIdentifier:patientIdentifiers) { + if(patientIdentifier.getIdentifier().equals(healthId)){ + patientIdentifier.setVoided(false); + patientService.savePatientIdentifier(patientIdentifier); + } + } } catch (NullPointerException ignored) { - return false; } } - private boolean isHealthIdRemoved(Patient patient) { + private void removeHealthId(Patient patient) { try { - PatientIdentifier patientIdentifier = patient.getPatientIdentifier(HEALTH_ID); + PatientIdentifier patientIdentifier = patient.getPatientIdentifier(PHR_ADDRESS); patient.removeIdentifier(patientIdentifier); patientService.purgePatientIdentifier(patientIdentifier); - return true; } catch (NullPointerException ignored) { - return false; } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ValidationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ValidationService.java index 71472578..d2821925 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ValidationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ValidationService.java @@ -17,12 +17,14 @@ public class ValidationService { private final VisitService visitService; private final PatientService patientService; private final ProgramWorkflowService programWorkflowService; + private final ExistingPatientService existingPatientService; @Autowired - public ValidationService(VisitService visitService, PatientService patientService, ProgramWorkflowService programWorkflowService) { + public ValidationService(VisitService visitService, PatientService patientService, ProgramWorkflowService programWorkflowService, ExistingPatientService existingPatientService) { this.patientService = patientService; this.visitService = visitService; this.programWorkflowService = programWorkflowService; + this.existingPatientService = existingPatientService; } public boolean isValidVisit(String visitType) { @@ -46,4 +48,15 @@ public boolean isValidProgram(String programName) { return true; return false; } + + public boolean isValidHealthId(String healthId){ + Patient patient = null; + try { + patient = patientService.getPatientByUuid(existingPatientService.getPatientWithHealthId(healthId)); + } + catch (NullPointerException ignored){ + + } + return patient != null; + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java index 2953be97..1753e645 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PatientControllerTest.java @@ -9,6 +9,7 @@ import org.bahmni.module.hip.web.client.model.ErrorRepresentation; import org.bahmni.module.hip.web.model.ExistingPatient; import org.bahmni.module.hip.web.service.ExistingPatientService; +import org.bahmni.module.hip.web.service.ValidationService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -50,6 +51,9 @@ public class PatientControllerTest extends TestCase { @Autowired private ExistingPatientService existingPatientService; + @Autowired + private ValidationService validationService; + @Before public void setup() { DefaultMockMvcBuilder builder = MockMvcBuilders.webAppContextSetup(this.wac); @@ -126,7 +130,7 @@ public void shouldReturnNoPatientFoundAsResponseWhenTheHealthIdIsNotLinkedToAnyP @Test public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresent() throws Exception { - when(existingPatientService.getStatus("test@sbx", "DELETED")).thenReturn(false); + when(validationService.isValidHealthId("test@sbx")).thenReturn(false); MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) .param("healthId", "test@sbx") @@ -141,7 +145,7 @@ public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresent() throws Ex @Test public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresentInDeactivation() throws Exception { - when(existingPatientService.getStatus("test@sbx", "DEACTIVATED")).thenReturn(false); + when(validationService.isValidHealthId("test@sbx")).thenReturn(false); MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) .param("healthId", "test@sbx") @@ -156,7 +160,7 @@ public void shouldReturnNoPatientIdentifierFoundIfHealthIsNotPresentInDeactivati @Test public void shouldNotReturnErrorWhenHealthIdIsRemoved() throws Exception { - when(existingPatientService.getStatus("test@sbx", "DELETED")).thenReturn(true); + when(validationService.isValidHealthId("test@sbx")).thenReturn(true); MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) .param("healthId", "test@sbx") @@ -169,7 +173,7 @@ public void shouldNotReturnErrorWhenHealthIdIsRemoved() throws Exception { @Test public void shouldNotReturnErrorWhenHealthIdIsDeactivated() throws Exception { - when(existingPatientService.getStatus("test@sbx", "DEACTIVATED")).thenReturn(true); + when(validationService.isValidHealthId("test@sbx")).thenReturn(true); MvcResult mvcResult = mockMvc.perform(get(String.format("/rest/%s/hip/existingPatients/status", RestConstants.VERSION_1)) .param("healthId", "test@sbx") diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/ValidationServiceTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/ValidationServiceTest.java index e910a847..513666bc 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/ValidationServiceTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/ValidationServiceTest.java @@ -17,7 +17,8 @@ public class ValidationServiceTest { private final VisitService visitService = mock(VisitService.class); private final PatientService patientService = mock(PatientService.class); private final ProgramWorkflowService programWorkflowService = mock(ProgramWorkflowService.class); - private final ValidationService validationService = new ValidationService(visitService,patientService, programWorkflowService); + private final ExistingPatientService existingPatientService = mock(ExistingPatientService.class); + private final ValidationService validationService = new ValidationService(visitService,patientService, programWorkflowService, existingPatientService); @Test public void shouldReturnTrueForValidVisitType() { String visitType = "OPD"; From 63567060128ab5eb06c8322372bc5fe9e8a7536d Mon Sep 17 00:00:00 2001 From: rohit-yawalkar <82825674+rohit-yawalkar@users.noreply.github.com> Date: Thu, 14 Oct 2021 14:03:59 +0530 Subject: [PATCH 135/264] 133-[Rohit|Tazeen] Adds care-plans in discharge summary notes (#48) * 133-[Rohit|Tazeen] Adds care-plans in discharge summary notes * 133-[Rohit|Tazeen] Adds medications in discharge summary notes * 133-[Rohit|Tazeen] Adds chief complaints in discharge summary notes * 133-[Rohit|Tazeen] Refactors adds consultation service to remove redundant code * 133-[Rohit|Tazeen] Adds medical history in discharge summary notes * 133-[Rohit|Tazeen] Refactors code in fetching physical examination * 133-[Rohit|Tazeen] Refactors code in fetching physical examination * 133-[Rohit|Tazeen] Refactors code in fetching physical examination * 133-[Rohit|Tazeen] Adds fetching physical examination in discharge summary * 133-[Rohit|Tazeen] Refactors code in fetching physical examination * 133-[Rohit|Tazeen] Adds fetching patient documents in discharge summary * 133-[Rohit|Tazeen] Refactors code in fetching procedure notes in discharge summary * 133-[Rohit|Tazeen] Adds fetching lab orders in discharge summary --- .../module/hip/api/dao/ConsultationDao.java | 13 + .../hip/api/dao/DischargeSummaryDao.java | 11 + .../module/hip/api/dao/OPConsultDao.java | 4 - .../hip/api/dao/impl/ConsultationDaoImpl.java | 94 ++++++ .../api/dao/impl/DischargeSummaryDaoImpl.java | 65 ++++ .../hip/api/dao/impl/OPConsultDaoImpl.java | 86 +----- .../DischargeSummaryController.java | 68 +++++ .../BundledDischargeSummaryResponse.java | 14 + .../hip/web/model/DischargeSummaryBundle.java | 18 ++ .../hip/web/model/FhirDischargeSummary.java | 240 +++++++++++++++ .../web/model/OpenMrsDischargeSummary.java | 281 ++++++++++++++++++ .../hip/web/service/ConsultationService.java | 129 ++++++++ .../web/service/DischargeSummaryService.java | 84 ++++++ .../hip/web/service/FHIRResourceMapper.java | 97 +++++- .../module/hip/web/service/FHIRUtils.java | 9 + .../FhirBundledDischargeSummaryBuilder.java | 37 +++ .../hip/web/service/OPConsultService.java | 119 +------- 17 files changed, 1172 insertions(+), 197 deletions(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/BundledDischargeSummaryResponse.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/DischargeSummaryBundle.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDischargeSummaryBuilder.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java new file mode 100644 index 00000000..c9f3c278 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java @@ -0,0 +1,13 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Patient; +import java.util.Date; +import java.util.List; + +public interface ConsultationDao { + List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate); + List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); + List getOrders(Patient patient, String visit, Date fromDate, Date toDate); +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java new file mode 100644 index 00000000..3337fffa --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java @@ -0,0 +1,11 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Obs; +import org.openmrs.Patient; +import java.util.Date; +import java.util.List; + +public interface DischargeSummaryDao { + List getCarePlan(Patient patient, String visit, Date fromDate, Date toDate); + List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); +} \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index 2a1e0a62..c234dca8 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -4,17 +4,13 @@ import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.module.emrapi.conditionslist.Condition; -import org.openmrs.Order; import java.util.Date; import java.util.List; import java.util.Map; public interface OPConsultDao { - List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate); Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate); List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); - List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); - List getOrders(Patient patient, String visit, Date fromDate, Date toDate); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java new file mode 100644 index 00000000..8eaeb30c --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -0,0 +1,94 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.ConsultationDao; +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Patient; +import org.openmrs.api.ObsService; +import org.openmrs.api.OrderService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.List; +import java.util.ArrayList; +import java.util.Date; +import java.util.Objects; +import java.util.Arrays; +import java.util.stream.Collectors; + +@Repository +public class ConsultationDaoImpl implements ConsultationDao { + public static final String RADIOLOGY_ORDER = "Radiology Order"; + public static final String OPD = "OPD"; + private final ObsService obsService; + private final OrderService orderService; + public static final String CONSULTATION = "Consultation"; + public static final String CHIEF_COMPLAINT = "Chief Complaint"; + public static final String ORDER_ACTION = "DISCONTINUE"; + public static final ArrayList ORDER_TYPES = new ArrayList() {{ add("Lab Order"); }}; + + @Autowired + public ConsultationDaoImpl(ObsService obsService, OrderService orderService) { + this.obsService = obsService; + this.orderService = orderService; + } + + @Override + public List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient); + List chiefComplaintObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) + && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) + && o.getValueCoded() != null + && o.getConcept().getName().getLocalePreferred() + ) + { + chiefComplaintObsMap.add(o); + } + } + return chiefComplaintObsMap; + } + + @Override + public List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate) { + final String[] formNames = new String[]{"Discharge Summary","Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", + "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; + List patientObs = obsService.getObservationsByPerson(patient); + List physicalExaminationObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) + && o.getValueCoded() == null + && o.getConcept().getName().getLocalePreferred() + && o.getObsGroup() == null + && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) + ) + { + physicalExaminationObsMap.add(o); + } + } + return physicalExaminationObsMap; + } + + @Override + public List getOrders(Patient patient, String visit, Date fromDate, Date toDate) { + if(Objects.equals(visit, OPD)) { ORDER_TYPES.add(RADIOLOGY_ORDER); } + List orders = orderService.getAllOrdersByPatient(patient); + return orders.stream().filter(order -> matchesVisitType(visit, order)) + .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate)) + .filter(order -> order.getEncounter().getVisit().getStartDatetime().before(toDate)) + .filter(order -> order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION)) + .filter(order -> ORDER_TYPES.contains(order.getOrderType().getName())) + .collect(Collectors.toList()); + } + + private boolean matchesVisitType(String visitType, Order order) { + return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); + } +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java new file mode 100644 index 00000000..c6d506b3 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -0,0 +1,65 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.DischargeSummaryDao; +import org.openmrs.Obs; +import org.openmrs.Patient; +import org.openmrs.api.ObsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Repository +public class DischargeSummaryDaoImpl implements DischargeSummaryDao { + + public static final String CONSULTATION = "Consultation"; + public static final String PROCEDURE_NOTES = "Procedure Notes"; + private final ObsService obsService; + + @Autowired + public DischargeSummaryDaoImpl(ObsService obsService) { + this.obsService = obsService; + } + + private boolean matchesVisitType(String visitType, Obs obs) { + return obs.getEncounter().getVisit().getVisitType().getName().equals(visitType); + } + + @Override + public List getCarePlan(Patient patient, String visit, Date fromDate, Date toDate) { + final String obsName = "Discharge Summary"; + List patientObs = obsService.getObservationsByPerson(patient); + + List carePlanObs = patientObs.stream().filter(obs -> matchesVisitType(visit, obs)) + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate)) + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().before(toDate)) + .filter(obs -> obsName.equals(obs.getConcept().getName().getName())) + .filter(obs -> obs.getConcept().getName().getLocalePreferred()) + .collect(Collectors.toList()); + + return carePlanObs; + } + + @Override + public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient); + List proceduresObsMap = new ArrayList<>(); + for(Obs o :patientObs){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().after(fromDate) + && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) + && o.getObsGroup() == null + && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + ) + { + proceduresObsMap.add(o); + } + } + return proceduresObsMap; + } +} \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 205bf472..01f2e577 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -1,59 +1,38 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.OPConsultDao; -import org.openmrs.*; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Patient; import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; import org.openmrs.module.emrapi.conditionslist.Condition; import org.openmrs.module.emrapi.conditionslist.ConditionService; import org.springframework.beans.factory.annotation.Autowired; -import org.openmrs.api.OrderService; import org.springframework.stereotype.Repository; -import java.util.*; +import java.util.Objects; +import java.util.List; +import java.util.Date; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; import java.util.stream.Collectors; @Repository public class OPConsultDaoImpl implements OPConsultDao { - public static final String CHIEF_COMPLAINT = "Chief Complaint"; public static final String PROCEDURE_NOTES = "Procedure Notes, Procedure"; public static final String CONSULTATION = "Consultation"; private static final String CODED_DIAGNOSIS = "Coded Diagnosis"; - public static final String OPD = "OPD"; - public static final String ORDER_ACTION = "DISCONTINUE"; - public static final String LAB_ORDER = "Lab Order"; - public static final String RADIOLOGY_ORDER = "Radiology Order"; + private final ObsService obsService; private final ConditionService conditionService; private final EncounterService encounterService; - private final OrderService orderService; @Autowired - public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService, OrderService orderService) { + public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService) { this.obsService = obsService; this.conditionService = conditionService; this.encounterService = encounterService; - this.orderService = orderService; - } - - - @Override - public List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient); - List chiefComplaintObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) - && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) - && o.getValueCoded() != null - && o.getConcept().getName().getLocalePreferred() - ) - { - chiefComplaintObsMap.add(o); - } - } - return chiefComplaintObsMap; } @Override @@ -65,7 +44,7 @@ public Map> getMedicalHistoryConditions(Patient patie .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation") && encounter.getDateCreated().after(fromDate) && encounter.getDateCreated().before(toDate) && - Objects.equals(encounter.getVisit().getVisitType().getName(), OPD)) + Objects.equals(encounter.getVisit().getVisitType().getName(), visit)) .collect(Collectors.toList()); List conditions = conditionService.getActiveConditions(patient) .stream() @@ -115,29 +94,6 @@ public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date return medicalHistoryDiagnosisObsMap; } - @Override - public List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate) { - final String[] formNames = new String[]{"Discharge Summary","Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", - "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; - List patientObs = obsService.getObservationsByPerson(patient); - List physicalExaminationObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) - && o.getValueCoded() == null - && o.getConcept().getName().getLocalePreferred() - && o.getObsGroup() == null - && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) - ) - { - physicalExaminationObsMap.add(o); - } - } - return physicalExaminationObsMap; - } - @Override public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { List patientObs = obsService.getObservationsByPerson(patient); @@ -146,7 +102,7 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) && o.getEncounter().getVisit().getStartDatetime().after(fromDate) && o.getEncounter().getVisit().getStartDatetime().before(toDate) - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), OPD) + && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) && !o.getVoided() ) @@ -156,20 +112,4 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat } return proceduresObsMap; } - - private boolean matchesVisitType(String visitType, Order order) { - return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); - } - - @Override - public List getOrders(Patient patient, String visit, Date fromDate, Date toDate) { - List orders = orderService.getAllOrdersByPatient(patient); - List orderMap = orders.stream().filter(order -> matchesVisitType(visit, order)) - .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate)) - .filter(order -> order.getEncounter().getVisit().getStartDatetime().before(toDate)) - .filter(order -> order.getDateStopped() == null && order.getAction().toString()!= ORDER_ACTION) - .filter(order -> order.getOrderType().getName().equals(LAB_ORDER) || order.getOrderType().getName().equals(RADIOLOGY_ORDER)) - .collect(Collectors.toList()); - return orderMap; - } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java new file mode 100644 index 00000000..a5f95306 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -0,0 +1,68 @@ +package org.bahmni.module.hip.web.controller; + +import org.bahmni.module.hip.web.client.ClientError; +import org.bahmni.module.hip.web.model.DischargeSummaryBundle; +import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.BundledDischargeSummaryResponse; +import org.bahmni.module.hip.web.service.DischargeSummaryService; +import org.bahmni.module.hip.web.service.ValidationService; +import org.openmrs.module.webservices.rest.web.RestConstants; +import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RequestParam; + +import java.text.ParseException; +import java.util.List; + +import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; + +@RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/dischargeSummary") +@RestController +public class DischargeSummaryController extends BaseRestController { + + private final ValidationService validationService; + private final DischargeSummaryService dischargeSummaryService; + + @Autowired + public DischargeSummaryController(ValidationService validationService, DischargeSummaryService dischargeSummaryService) { + this.validationService = validationService; + this.dischargeSummaryService = dischargeSummaryService; + } + + @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity get(@RequestParam String patientId, + @RequestParam String visitType, + @RequestParam String fromDate, + @RequestParam String toDate) throws ParseException { + + if (patientId == null || patientId.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + if (visitType == null || visitType.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (!validationService.isValidVisit(visitType)) + return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); + if (!validationService.isValidPatient(patientId)) + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + + List dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); + } +} + + + + + + + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/BundledDischargeSummaryResponse.java b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledDischargeSummaryResponse.java new file mode 100644 index 00000000..b2f35767 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/BundledDischargeSummaryResponse.java @@ -0,0 +1,14 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.util.List; + +@AllArgsConstructor +@Getter +@Setter +public class BundledDischargeSummaryResponse { + private List dischargeSummary; +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/DischargeSummaryBundle.java b/omod/src/main/java/org/bahmni/module/hip/web/model/DischargeSummaryBundle.java new file mode 100644 index 00000000..9a2daec6 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/DischargeSummaryBundle.java @@ -0,0 +1,18 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; +import org.bahmni.module.hip.web.model.serializers.FhirBundleSerializer; +import org.codehaus.jackson.map.annotate.JsonSerialize; +import org.hl7.fhir.r4.model.Bundle; + +@Getter +@Setter +@Builder +public class DischargeSummaryBundle { + private CareContext careContext; + + @JsonSerialize(using = FhirBundleSerializer.class) + private Bundle bundle; +} \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java new file mode 100644 index 00000000..196b90b1 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java @@ -0,0 +1,240 @@ +package org.bahmni.module.hip.web.model; + +import org.bahmni.module.hip.web.service.FHIRResourceMapper; +import org.bahmni.module.hip.web.service.FHIRUtils; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.Practitioner; +import org.hl7.fhir.r4.model.Condition; +import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.MedicationRequest; +import org.hl7.fhir.r4.model.Medication; +import org.hl7.fhir.r4.model.Reference; +import org.hl7.fhir.r4.model.Observation; +import org.hl7.fhir.r4.model.CarePlan; +import org.hl7.fhir.r4.model.DocumentReference; +import org.hl7.fhir.r4.model.Bundle; +import org.hl7.fhir.r4.model.Composition; +import org.hl7.fhir.r4.model.Procedure; +import org.hl7.fhir.r4.model.ServiceRequest; +import org.openmrs.EncounterProvider; + +import java.util.Date; +import java.util.List; +import java.util.Set; +import java.util.UUID; +import java.util.Objects; +import java.util.stream.Collectors; + +public class FhirDischargeSummary { + + private final Date encounterTimestamp; + private final Integer encounterID; + private final Encounter encounter; + private final List practitioners; + private final List chiefComplaints; + private final Patient patient; + private final List medicationRequests; + private final List medications; + private final List medicalHistory; + private final Reference patientReference; + private final List observations; + private final List carePlan; + private final List patientDocuments; + private final Procedure procedures; + private final List serviceRequest; + + public FhirDischargeSummary(Integer encounterID, + Encounter encounter, + Date encounterTimestamp, + List practitioners, + Reference patientReference, + List chiefComplaints, + List medicationRequests, + List medications, + List medicalHistory, + Patient patient, + List carePlan, + List observations, + List patientDocuments, + Procedure procedures, + List serviceRequest){ + this.encounterTimestamp = encounterTimestamp; + this.encounterID = encounterID; + this.encounter = encounter; + this.chiefComplaints = chiefComplaints; + this.practitioners = practitioners; + this.medicationRequests = medicationRequests; + this.medications = medications; + this.medicalHistory = medicalHistory; + this.patient = patient; + this.patientReference = patientReference; + this.carePlan = carePlan; + this.observations = observations; + this.patientDocuments = patientDocuments; + this.procedures = procedures; + this.serviceRequest = serviceRequest; + } + public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeSummary openMrsDischargeSummary, FHIRResourceMapper fhirResourceMapper){ + Patient patient = fhirResourceMapper.mapToPatient(openMrsDischargeSummary.getPatient()); + Reference patientReference = FHIRUtils.getReferenceToResource(patient); + Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsDischargeSummary.getEncounter()); + Date encounterDatetime = openMrsDischargeSummary.getEncounter().getEncounterDatetime(); + Integer encounterId = openMrsDischargeSummary.getEncounter().getId(); + List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDischargeSummary.getEncounter().getEncounterProviders()); + List carePlans = openMrsDischargeSummary.getCarePlanObs().stream(). + map(fhirResourceMapper::mapToCarePlan).collect(Collectors.toList()); + List chiefComplaints = openMrsDischargeSummary.getChiefComplaints().stream(). + map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List medicationRequestsList = openMrsDischargeSummary.getDrugOrders().stream(). + map(fhirResourceMapper::mapToMedicationRequest).collect(Collectors.toList()); + List medications = openMrsDischargeSummary.getDrugOrders().stream().map(fhirResourceMapper::mapToMedication). + filter(medication -> !Objects.isNull(medication)).collect(Collectors.toList()); + List fhirMedicalHistoryList = openMrsDischargeSummary.getMedicalHistory().stream(). + map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List physicalExaminations = openMrsDischargeSummary.getPhysicalExaminationObs().stream(). + map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); + List patientDocuments = openMrsDischargeSummary.getPatientDocuments().stream(). + map(fhirResourceMapper::mapToDocumentDocumentReference).collect(Collectors.toList()); + Procedure procedures = openMrsDischargeSummary.getProcedure() != null ? + fhirResourceMapper.mapToProcedure(openMrsDischargeSummary.getProcedure()) : null; + List serviceRequest = openMrsDischargeSummary.getOrders().stream(). + map(fhirResourceMapper::mapToOrder).collect(Collectors.toList()); + + return new FhirDischargeSummary(encounterId, encounter, encounterDatetime, practitioners, patientReference, chiefComplaints, medicationRequestsList, medications, fhirMedicalHistoryList, patient, carePlans, physicalExaminations, patientDocuments, procedures, serviceRequest); + } + + public Bundle bundleDischargeSummary(String webUrl){ + String bundleID = String.format("PR-%d", encounterID); + Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); + FHIRUtils.addToBundleEntry(bundle, practitioners, false); + FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); + FHIRUtils.addToBundleEntry(bundle, chiefComplaints, false); + FHIRUtils.addToBundleEntry(bundle, medications, false); + FHIRUtils.addToBundleEntry(bundle, medicalHistory, false); + FHIRUtils.addToBundleEntry(bundle, patient, false); + FHIRUtils.addToBundleEntry(bundle, encounter, false); + FHIRUtils.addToBundleEntry(bundle, carePlan, false); + FHIRUtils.addToBundleEntry(bundle, observations, false); + if (procedures != null) FHIRUtils.addToBundleEntry(bundle, procedures, false); + FHIRUtils.addToBundleEntry(bundle, patientDocuments, false); + FHIRUtils.addToBundleEntry(bundle, serviceRequest, false); + return bundle; + } + + private Composition compositionFrom(String webURL) { + Composition composition = initializeComposition(encounterTimestamp, webURL); + composition + .setEncounter(FHIRUtils.getReferenceToResource(encounter)) + .setSubject(patientReference); + + practitioners + .forEach(practitioner -> composition + .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); + + if (carePlan.size() > 0) { + Composition.SectionComponent physicalExaminationsCompositionSection = composition.addSection(); + physicalExaminationsCompositionSection + .setTitle("Care Plan") + .setCode(FHIRUtils.getCarePlanType()); + carePlan + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(physicalExaminationsCompositionSection::addEntry); + } + + if(medicationRequests.size() > 0){ + Composition.SectionComponent medicationRequestsCompositionSection = composition.addSection(); + medicationRequestsCompositionSection + .setTitle("Medication request") + .setCode(FHIRUtils.getPrescriptionType()); + medicationRequests + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(medicationRequestsCompositionSection::addEntry); + } + + if (chiefComplaints.size() > 0){ + Composition.SectionComponent chiefComplaintsCompositionSection = composition.addSection(); + chiefComplaintsCompositionSection + .setTitle("Chief complaint") + .setCode(FHIRUtils.getChiefComplaintType()); + chiefComplaints + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(chiefComplaintsCompositionSection::addEntry); + } + + if (medicalHistory.size() > 0) { + Composition.SectionComponent medicalHistoryCompositionSection = composition.addSection(); + medicalHistoryCompositionSection + .setTitle("Medical history") + .setCode(FHIRUtils.getMedicalHistoryType()); + medicalHistory + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(medicalHistoryCompositionSection::addEntry); + } + + if (observations.size() > 0) { + Composition.SectionComponent physicalExaminationsCompositionSection = composition.addSection(); + physicalExaminationsCompositionSection + .setTitle("Physical examination") + .setCode(FHIRUtils.getPhysicalExaminationType()); + observations + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(physicalExaminationsCompositionSection::addEntry); + } + + if (patientDocuments.size() > 0) { + Composition.SectionComponent patientDocumentsCompositionSection = composition.addSection(); + patientDocumentsCompositionSection + .setTitle("Patient Document") + .setCode(FHIRUtils.getPatientDocumentType()); + patientDocuments + .stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(patientDocumentsCompositionSection::addEntry); + } + + if (procedures != null) { + Composition.SectionComponent procedureCompositionSection = composition.addSection(); + procedureCompositionSection + .setTitle("Procedure") + .setCode(FHIRUtils.getProcedureType()); + + procedureCompositionSection.addEntry(FHIRUtils.getReferenceToResource(procedures)); + } + + if (serviceRequest.size() > 0) { + Composition.SectionComponent serviceRequestCompositionSection = composition.addSection(); + serviceRequestCompositionSection + .setTitle("Order") + .setCode(FHIRUtils.getOrdersType()); + serviceRequest.stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(serviceRequestCompositionSection::addEntry); + } + + return composition; + } + + private Composition initializeComposition(Date encounterTimestamp, String webURL) { + Composition composition = new Composition(); + composition.setId(UUID.randomUUID().toString()); + composition.setDate(encounterTimestamp); + composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "Composition")); + composition.setStatus(Composition.CompositionStatus.FINAL); + composition.setType(FHIRUtils.getOPConsultType()); + composition.setTitle("Discharge Summary Document"); + return composition; + } + + private static List getPractitionersFrom(FHIRResourceMapper fhirResourceMapper, Set encounterProviders) { + return encounterProviders + .stream() + .map(fhirResourceMapper::mapToPractitioner) + .collect(Collectors.toList()); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java new file mode 100644 index 00000000..476660e3 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java @@ -0,0 +1,281 @@ +package org.bahmni.module.hip.web.model; + +import lombok.Getter; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Patient; +import org.openmrs.EncounterProvider; +import org.openmrs.DrugOrder; +import org.openmrs.Order; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + +@Getter +public class OpenMrsDischargeSummary { + + private final Encounter encounter; + private final List carePlanObs; + private final Patient patient; + private final Set encounterProviders; + private final List drugOrders; + private final List chiefComplaints; + private final List medicalHistory; + private final List physicalExaminationObs; + private final List patientDocuments; + private final Obs procedure; + private final List orders; + + public OpenMrsDischargeSummary(Encounter encounter, + List carePlanObs, + List drugOrders, + Patient patient, + Set encounterProviders, + List chiefComplaints, + List medicalHistory, + List patientDocuments, + List physicalExaminationObs, + Obs procedure, List orders){ + this.encounter = encounter; + this.carePlanObs = carePlanObs; + this.drugOrders = drugOrders; + this.patient = patient; + this.encounterProviders = encounterProviders; + this.chiefComplaints = chiefComplaints; + this.medicalHistory = medicalHistory; + this.physicalExaminationObs = physicalExaminationObs; + this.patientDocuments = patientDocuments; + this.procedure = procedure; + this.orders = orders; + } + public static List getOpenMrsDischargeSummaryList(Map> encounterCarePlanMap, + Map encounterDrugOrdersMap, + Map> encounterChiefComplaintsMap, + Map> encounterMedicalHistoryMap, + Map> encounterPhysicalExaminationMap, + Map> encounterPatientDocumentsMap, + Map encounterProcedureNotesMap, + Map> encounterOrdersMap, + Patient patient){ + List openMrsDischargeSummaryList = new ArrayList<>(); + + for(Map.Entry> encounterListEntry : encounterCarePlanMap.entrySet()){ + List carePlanList = encounterCarePlanMap.get(encounterListEntry.getKey()); + List drugOrdersList = new ArrayList<>(); + List chiefComplaintList = new ArrayList<>(); + List medicalHistoryList = new ArrayList<>(); + List physicalExaminationList = new ArrayList<>(); + List patientDocumentList = new ArrayList<>(); + List orderList = new ArrayList<>(); + Obs procedure = null; + if (encounterDrugOrdersMap.get(encounterListEntry.getKey()) != null){ + drugOrdersList = encounterDrugOrdersMap.get(encounterListEntry.getKey()).getOpenMRSDrugOrders(); + encounterDrugOrdersMap.remove(encounterListEntry.getKey()); + } + if (encounterChiefComplaintsMap.get(encounterListEntry.getKey()) != null) { + chiefComplaintList = getEncounterConditions(encounterChiefComplaintsMap, encounterListEntry.getKey()); + encounterChiefComplaintsMap.remove(encounterListEntry.getKey()); + } + if(encounterMedicalHistoryMap.get(encounterListEntry.getKey()) != null) { + medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, encounterListEntry.getKey()); + encounterMedicalHistoryMap.remove(encounterListEntry.getKey()); + } + if(encounterPhysicalExaminationMap.get(encounterListEntry.getKey()) != null){ + physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, encounterListEntry.getKey()); + encounterPhysicalExaminationMap.remove(encounterListEntry.getKey()); + } + if(encounterPatientDocumentsMap.get(encounterListEntry.getKey()) != null){ + patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, encounterListEntry.getKey()); + encounterPatientDocumentsMap.remove(encounterListEntry.getKey()); + } + if(encounterProcedureNotesMap.get(encounterListEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, encounterListEntry.getKey()); + encounterProcedureNotesMap.remove(encounterListEntry.getKey()); + } + if(encounterOrdersMap.get(encounterListEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, encounterListEntry.getKey()); + encounterOrdersMap.remove(encounterListEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(encounterListEntry.getKey(), carePlanList, drugOrdersList, patient, encounterListEntry.getKey().getEncounterProviders(), chiefComplaintList, medicalHistoryList, patientDocumentList, physicalExaminationList, procedure, orderList)); + } + + for(Map.Entry encounterListEntry : encounterDrugOrdersMap.entrySet()){ + List drugOrdersList = encounterDrugOrdersMap.get(encounterListEntry.getKey()).getOpenMRSDrugOrders(); + List chiefComplaintList = new ArrayList<>(); + List medicalHistoryList = new ArrayList<>(); + List physicalExaminationList = new ArrayList<>(); + List patientDocumentList = new ArrayList<>(); + List orderList = new ArrayList<>(); + Obs procedure = null; + if (encounterChiefComplaintsMap.get(encounterListEntry.getKey()) != null) { + chiefComplaintList = getEncounterConditions(encounterChiefComplaintsMap, encounterListEntry.getKey()); + encounterChiefComplaintsMap.remove(encounterListEntry.getKey()); + } + if(encounterMedicalHistoryMap.get(encounterListEntry.getKey()) != null) { + medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, encounterListEntry.getKey()); + encounterMedicalHistoryMap.remove(encounterListEntry.getKey()); + } + if(encounterPhysicalExaminationMap.get(encounterListEntry.getKey()) != null){ + physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, encounterListEntry.getKey()); + encounterPhysicalExaminationMap.remove(encounterListEntry.getKey()); + } + if(encounterPatientDocumentsMap.get(encounterListEntry.getKey()) != null){ + patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, encounterListEntry.getKey()); + encounterPatientDocumentsMap.remove(encounterListEntry.getKey()); + } + if(encounterProcedureNotesMap.get(encounterListEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, encounterListEntry.getKey()); + encounterProcedureNotesMap.remove(encounterListEntry.getKey()); + } + if(encounterOrdersMap.get(encounterListEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, encounterListEntry.getKey()); + encounterOrdersMap.remove(encounterListEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(encounterListEntry.getKey(), new ArrayList<>(), drugOrdersList, patient, encounterListEntry.getKey().getEncounterProviders(), chiefComplaintList, medicalHistoryList, patientDocumentList, physicalExaminationList, procedure, orderList)); + } + + for(Map.Entry> encounterListEntry : encounterChiefComplaintsMap.entrySet()){ + List medicalHistoryList = new ArrayList<>(); + List physicalExaminationList = new ArrayList<>(); + List patientDocumentList = new ArrayList<>(); + List orderList = new ArrayList<>(); + Obs procedure = null; + List chiefComplaintList = getEncounterConditions(encounterChiefComplaintsMap, encounterListEntry.getKey()); + if(encounterMedicalHistoryMap.get(encounterListEntry.getKey()) != null) { + medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, encounterListEntry.getKey()); + encounterMedicalHistoryMap.remove(encounterListEntry.getKey()); + } + if(encounterPhysicalExaminationMap.get(encounterListEntry.getKey()) != null){ + physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, encounterListEntry.getKey()); + encounterPhysicalExaminationMap.remove(encounterListEntry.getKey()); + } + if(encounterPatientDocumentsMap.get(encounterListEntry.getKey()) != null){ + patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, encounterListEntry.getKey()); + encounterPatientDocumentsMap.remove(encounterListEntry.getKey()); + } + if(encounterProcedureNotesMap.get(encounterListEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, encounterListEntry.getKey()); + encounterProcedureNotesMap.remove(encounterListEntry.getKey()); + } + if(encounterOrdersMap.get(encounterListEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, encounterListEntry.getKey()); + encounterOrdersMap.remove(encounterListEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(encounterListEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, encounterListEntry.getKey().getEncounterProviders(), chiefComplaintList, medicalHistoryList, patientDocumentList, physicalExaminationList, procedure, orderList)); + } + + for(Map.Entry> medicalHistoryEntry : encounterMedicalHistoryMap.entrySet()){ + List medicalHistoryList = getEncounterConditions(encounterChiefComplaintsMap, medicalHistoryEntry.getKey()); + List physicalExaminationList = new ArrayList<>(); + List patientDocumentList = new ArrayList<>(); + List orderList = new ArrayList<>(); + Obs procedure = null; + if(encounterPhysicalExaminationMap.get(medicalHistoryEntry.getKey()) != null){ + physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, medicalHistoryEntry.getKey()); + encounterPhysicalExaminationMap.remove(medicalHistoryEntry.getKey()); + } + if(encounterPatientDocumentsMap.get(medicalHistoryEntry.getKey()) != null){ + patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, medicalHistoryEntry.getKey()); + encounterPatientDocumentsMap.remove(medicalHistoryEntry.getKey()); + } + if(encounterProcedureNotesMap.get(medicalHistoryEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, medicalHistoryEntry.getKey()); + encounterProcedureNotesMap.remove(medicalHistoryEntry.getKey()); + } + if(encounterOrdersMap.get(medicalHistoryEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, medicalHistoryEntry.getKey()); + encounterOrdersMap.remove(medicalHistoryEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(medicalHistoryEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, medicalHistoryEntry.getKey().getEncounterProviders(), new ArrayList<>(), medicalHistoryList, patientDocumentList, physicalExaminationList, procedure, orderList)); + } + + for(Map.Entry> physicalExaminationEntry : encounterPhysicalExaminationMap.entrySet()){ + List physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, physicalExaminationEntry.getKey()); + List patientDocumentList = new ArrayList<>(); + List orderList = new ArrayList<>(); + Obs procedure = null; + if(encounterPatientDocumentsMap.get(physicalExaminationEntry.getKey()) != null){ + patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, physicalExaminationEntry.getKey()); + encounterPatientDocumentsMap.remove(physicalExaminationEntry.getKey()); + } + if(encounterProcedureNotesMap.get(physicalExaminationEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, physicalExaminationEntry.getKey()); + encounterProcedureNotesMap.remove(physicalExaminationEntry.getKey()); + } + if(encounterOrdersMap.get(physicalExaminationEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, physicalExaminationEntry.getKey()); + encounterOrdersMap.remove(physicalExaminationEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(physicalExaminationEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, physicalExaminationEntry.getKey().getEncounterProviders(), new ArrayList<>(), new ArrayList<>(), patientDocumentList, physicalExaminationList, procedure, orderList)); + } + + for(Map.Entry> patientDocumentEntry : encounterPatientDocumentsMap.entrySet()){ + List patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, patientDocumentEntry.getKey()); + List orderList = new ArrayList<>(); + Obs procedure = null; + if(encounterProcedureNotesMap.get(patientDocumentEntry.getKey()) != null) { + procedure = getEncounterObsProcedure(encounterProcedureNotesMap, patientDocumentEntry.getKey()); + encounterProcedureNotesMap.remove(patientDocumentEntry.getKey()); + } + if(encounterOrdersMap.get(patientDocumentEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, patientDocumentEntry.getKey()); + encounterOrdersMap.remove(patientDocumentEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(patientDocumentEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, patientDocumentEntry.getKey().getEncounterProviders(), new ArrayList<>(), new ArrayList<>(), patientDocumentList, new ArrayList<>(), procedure, orderList)); + } + + for(Map.Entry procedureMapEntry : encounterProcedureNotesMap.entrySet()){ + Obs procedure = getEncounterObsProcedure(encounterProcedureNotesMap, procedureMapEntry.getKey()); + List orderList = new ArrayList<>(); + if(encounterOrdersMap.get(procedureMapEntry.getKey()) != null) { + orderList = getEncounterOrders(encounterOrdersMap, procedureMapEntry.getKey()); + encounterOrdersMap.remove(procedureMapEntry.getKey()); + } + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(procedureMapEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, procedureMapEntry.getKey().getEncounterProviders(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), procedure, orderList)); + } + + for(Map.Entry> orderMapEntry : encounterOrdersMap.entrySet()){ + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(orderMapEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, orderMapEntry.getKey().getEncounterProviders(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), new ArrayList<>(), null, encounterOrdersMap.get(orderMapEntry.getKey()))); + } + + return openMrsDischargeSummaryList; + } + + private static List getEncounterConditions(Map> map, Encounter encounter) { + if (map.containsKey(encounter)) { + List conditionList = map.get(encounter); + map.remove(encounter); + return conditionList; + } + return null; + } + + private static List getEncounterOrders(Map> map, Encounter encounter){ + if (map.containsKey(encounter)) { + List orderList = map.get(encounter); + map.remove(encounter); + return orderList; + } + return null; + } + + private static List getEncounterObs(Map> map, Encounter encounter) { + if (map.containsKey(encounter)) { + List obsList = map.get(encounter); + map.remove(encounter); + return obsList; + } + return null; + } + + private static Obs getEncounterObsProcedure(Map map, Encounter encounter) { + if (map.containsKey(encounter)) { + Obs obs = map.get(encounter); + map.remove(encounter); + return obs; + } + return null; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java new file mode 100644 index 00000000..da2dea48 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -0,0 +1,129 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.api.dao.ConsultationDao; +import org.bahmni.module.hip.api.dao.OPConsultDao; +import org.bahmni.module.hip.web.model.OpenMrsCondition; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Patient; +import org.openmrs.module.emrapi.conditionslist.Condition; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Map; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.Date; +import java.util.Set; +import java.util.HashSet; +import java.util.Arrays; +import java.util.stream.Collectors; + +@Service +public class ConsultationService { + + private final ConsultationDao consultationDao; + private final OPConsultDao opConsultDao; + private final DiagnosticReportService diagnosticReportService; + public static Set conceptNames = new HashSet<>(Arrays.asList("Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", + "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", + "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Nutrition, Bal Vita Provided by FCHV","Bal Vita Provided by FCHV","ART, Condoms given","HIVTC, Marital Status","Malaria, Contact number", + "HIVTC, Transferred out", "HIVTC, Regimen when transferred out", "HIVTC, Date of transferred out", "HIVTC, Transferred out to", "HIVTC, Chief Complaint")); + + @Autowired + public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsultDao, DiagnosticReportService diagnosticReportService) { + this.consultationDao = consultationDao; + this.opConsultDao = opConsultDao; + this.diagnosticReportService = diagnosticReportService; + } + + public Map> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, fromDate, toDate); + HashMap> encounterChiefComplaintsMap = new HashMap<>(); + + for (Obs o : chiefComplaints) { + if(!encounterChiefComplaintsMap.containsKey(o.getEncounter())){ + encounterChiefComplaintsMap.put(o.getEncounter(), new ArrayList<>()); + } + encounterChiefComplaintsMap.get(o.getEncounter()).add(new OpenMrsCondition(o.getUuid(), o.getValueCoded().getDisplayString(), o.getDateCreated())); + } + return encounterChiefComplaintsMap; + } + + public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); + Map> encounterMedicalHistoryMap = new HashMap<>(); + + for(Map.Entry> medicalHistory : medicalHistoryConditionsMap.entrySet()){ + if (!encounterMedicalHistoryMap.containsKey(medicalHistory.getKey())){ + encounterMedicalHistoryMap.put(medicalHistory.getKey(), new ArrayList<>()); + } + for(Condition condition : medicalHistory.getValue()){ + encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConcept().getDisplayString(), condition.getDateCreated())); + } + } + for(Obs obs : medicalHistoryDiagnosisMap){ + if (!encounterMedicalHistoryMap.containsKey(obs.getEncounter())){ + encounterMedicalHistoryMap.put(obs.getEncounter(), new ArrayList<>()); + } + encounterMedicalHistoryMap.get(obs.getEncounter()).add(new OpenMrsCondition(obs.getUuid(), obs.getValueCoded().getDisplayString(), obs.getDateCreated())); + } + return encounterMedicalHistoryMap; + } + + public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, fromDate, toDate); + Map> encounterPhysicalExaminationMap = new HashMap<>(); + for (Obs physicalExamination : physicalExaminations) { + Encounter encounter = physicalExamination.getEncounter(); + List groupMembers = new ArrayList<>(); + getGroupMembersOfObs(physicalExamination, groupMembers); + if (!encounterPhysicalExaminationMap.containsKey(encounter)) { + encounterPhysicalExaminationMap.put(encounter, new ArrayList<>()); + } + encounterPhysicalExaminationMap.get(encounter).addAll(groupMembers); + } + return encounterPhysicalExaminationMap; + } + + public Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { + final int patientDocumentEncounterType = 9; + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); + Map> encounterPatientDocumentsMap = new HashMap<>(); + for (Encounter e : encounterDiagnosticReportsMap.keySet()) { + List patientDocuments = e.getAllObs().stream(). + filter(o -> (o.getEncounter().getEncounterType().getEncounterTypeId() == patientDocumentEncounterType && o.getValueText() == null)) + .collect(Collectors.toList()); + if (patientDocuments.size() > 0) { + encounterPatientDocumentsMap.put(e, patientDocuments); + } + } + return encounterPatientDocumentsMap; + } + + public Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { + List orders = consultationDao.getOrders(patient, visitType, fromDate, toDate); + Map> encounterOrdersMap = new HashMap<>(); + for(Order order : orders){ + if (!encounterOrdersMap.containsKey(order.getEncounter())) { + encounterOrdersMap.put(order.getEncounter(), new ArrayList<>()); + } + encounterOrdersMap.get(order.getEncounter()).add(order); + } + return encounterOrdersMap; + } + + private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { + if (physicalExamination.getGroupMembers().size() > 0) { + for (Obs groupMember : physicalExamination.getGroupMembers()) { + if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; + getGroupMembersOfObs(groupMember, groupMembers); + } + } else { + groupMembers.add(physicalExamination); + } + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java new file mode 100644 index 00000000..085f277e --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -0,0 +1,84 @@ +package org.bahmni.module.hip.web.service; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.bahmni.module.hip.api.dao.DischargeSummaryDao; +import org.bahmni.module.hip.web.model.OpenMrsCondition; +import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.DischargeSummaryBundle; +import org.bahmni.module.hip.web.model.DrugOrders; +import org.bahmni.module.hip.web.model.OpenMrsDischargeSummary; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Patient; +import org.openmrs.api.PatientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Date; +import java.util.HashMap; +import java.util.ArrayList; +import java.util.Map; +import java.util.stream.Collectors; + +@Service +public class DischargeSummaryService { + + private final PatientService patientService; + private final DischargeSummaryDao dischargeSummaryDao; + private final FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder; + private final OpenMRSDrugOrderClient openMRSDrugOrderClient; + private final ConsultationService consultationService; + private Log log = LogFactory.getLog(this.getClass()); + + @Autowired + public DischargeSummaryService(PatientService patientService, DischargeSummaryDao dischargeSummaryDao, FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder, OpenMRSDrugOrderClient openMRSDrugOrderClient, ConsultationService consultationService) { + this.patientService = patientService; + this.dischargeSummaryDao = dischargeSummaryDao; + this.fhirBundledDischargeSummaryBuilder = fhirBundledDischargeSummaryBuilder; + this.openMRSDrugOrderClient = openMRSDrugOrderClient; + this.consultationService = consultationService; + } + + public List getDischargeSummaryForVisit(String patientUuid, DateRange dateRange, String visitType) { + Date fromDate = dateRange.getFrom(); + Date toDate = dateRange.getTo(); + Patient patient = patientService.getPatientByUuid(patientUuid); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, fromDate, toDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); + Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); + Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, fromDate, toDate, patient); + + List openMrsDischargeSummaryList = OpenMrsDischargeSummary.getOpenMrsDischargeSummaryList(encounterDischargeSummaryMap, encounteredDrugOrdersMap, encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounterPatientDocumentsMap, encounterProcedureMap, encounterOrdersMap, patient); + return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); + } + + private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType, fromDate, toDate); + Map> encounterCarePlanMap = new HashMap<>(); + for(Obs obs : carePlanObs){ + Encounter encounter = obs.getEncounter(); + if(!encounterCarePlanMap.containsKey(encounter)){ + encounterCarePlanMap.put(encounter, new ArrayList<>()); + } + encounterCarePlanMap.get(encounter).add(obs); + } + return encounterCarePlanMap; + } + + private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, fromDate, toDate); + Map encounterProcedureMap = new HashMap<>(); + for(Obs o: obsProcedures){ + encounterProcedureMap.put(o.getEncounter(), o); + } + return encounterProcedureMap; + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 2d457242..50830e08 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,8 +1,9 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.web.model.OpenMrsCondition; -import org.hl7.fhir.r4.model.Encounter; import org.hl7.fhir.r4.model.DiagnosticReport; +import org.hl7.fhir.r4.model.Encounter; +import org.hl7.fhir.r4.model.CarePlan; import org.hl7.fhir.r4.model.DocumentReference; import org.hl7.fhir.r4.model.Attachment; import org.hl7.fhir.r4.model.Condition; @@ -15,6 +16,7 @@ import org.hl7.fhir.r4.model.MedicationRequest; import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.Medication; + import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; import org.openmrs.Obs; @@ -31,9 +33,12 @@ import java.io.File; import java.nio.file.Files; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; +import java.util.HashSet; import java.util.Set; +import java.util.Arrays; +import java.util.List; +import java.util.ArrayList; +import java.util.Objects; import static org.bahmni.module.hip.web.service.Constants.DOCUMENT_TYPE; import static org.bahmni.module.hip.web.service.Constants.GIF; @@ -59,6 +64,7 @@ public class FHIRResourceMapper { private final MedicationTranslator medicationTranslator; private final EncounterTranslatorImpl encounterTranslator; private final ObservationTranslatorImpl observationTranslator; + public static Set conceptNames = new HashSet<>(Arrays.asList("Follow up Date", "Additional Advice on Discharge", "Discharge Summary, Plan for follow up")); @Autowired public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator, EncounterTranslatorImpl encounterTranslator, ObservationTranslatorImpl observationTranslator) { @@ -86,6 +92,81 @@ public DiagnosticReport mapToDiagnosticReport(Obs obs) { } } + public Procedure mapToProcedure(Obs obs) { + Procedure procedure = new Procedure(); + procedure.setId(obs.getUuid()); + procedure = obs.getGroupMembers().size() > 0 ? mapGroupMembersToProcedure(obs.getGroupMembers(), procedure) + : mapObsToProcedure(obs, procedure); + return procedure; + } + + public Procedure mapGroupMembersToProcedure(Set obsGroupMembers, Procedure procedure){ + procedure.setStatus(Procedure.ProcedureStatus.COMPLETED); + StringBuilder title = new StringBuilder(); + StringBuilder description = new StringBuilder(""); + CodeableConcept concept = new CodeableConcept(); + for(Obs o : obsGroupMembers){ + if(Objects.equals(o.getConcept().getName().getName(), "Procedure Notes, Procedure")){ + title.append(o.getValueCoded().getDisplayString()); + } else { + description.append(description.toString().equals("") ? "" : ", "); + if(o.getValueCoded() != null){ + description.append(o.getValueCoded().getName().getName()); + }else if(o.getValueText() != null){ + description.append(o.getValueText()); + } else if(o.getValueNumeric() != null){ + description.append(o.getValueNumeric()); + } + } + } + concept.setText(title + ", " + description); + procedure.setCode(concept); + return procedure; + } + + public Procedure mapObsToProcedure(Obs obs, Procedure procedure){ + procedure.setStatus(Procedure.ProcedureStatus.COMPLETED); + CodeableConcept concept = new CodeableConcept(); + concept.setText(obs.getValueCoded().getDisplayString()); + procedure.setCode(concept); + return procedure; + } + + public CarePlan mapToCarePlan(Obs obs){ + List groupMembers = new ArrayList<>(); + getGroupMembersOfObs(obs, groupMembers); + CarePlan carePlan = new CarePlan(); + carePlan.setId(obs.getUuid()); + String description = ""; + for(Obs o : groupMembers){ + if(o.getValueDatetime() != null) { + description += description != "" ? ", " : ""; + description += o.getValueDatetime(); + } else if(o.getValueText() != null && Objects.equals(o.getConcept().getName().getName(), "Additional Advice on Discharge")){ + description += description != "" ? ", " : ""; + description += o.getValueText(); + } + if(o.getValueText() != null && Objects.equals(o.getConcept().getName().getName(), "Discharge Summary, Plan for follow up")){ + carePlan.setTitle(o.getValueText()); + carePlan.setUserData("Discharge Summary, Plan for follow up", o.getValueText()); + } + } + if(!description.isEmpty()){ + carePlan.setDescription(description); + } + return carePlan; + } + + private void getGroupMembersOfObs(Obs obs, List groupMembers) { + if (obs.getGroupMembers().size() > 0) { + for (Obs groupMember : obs.getGroupMembers()) { + if (conceptNames.contains(groupMember.getConcept().getDisplayString())){ + groupMembers.add(groupMember); + } + } + } + } + public DocumentReference mapToDocumentDocumentReference(Obs obs) { DocumentReference documentReference = new DocumentReference(); documentReference.setId(obs.getUuid()); @@ -155,16 +236,6 @@ public ServiceRequest mapToOrder(Order order){ return serviceRequest; } - public Procedure mapToProcedure(Obs obs) { - Procedure procedure = new Procedure(); - procedure.setStatus(Procedure.ProcedureStatus.COMPLETED); - CodeableConcept concept = new CodeableConcept(); - concept.setText(obs.getValueCoded().getDisplayString()); - procedure.setCode(concept); - procedure.setId(obs.getUuid()); - return procedure; - } - private String getTypeOfTheObsDocument(String valueText) { if (valueText == null) return ""; String extension = valueText.substring(valueText.indexOf('.') + 1); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 94532904..711e6e8f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -117,6 +117,15 @@ public static CodeableConcept getPhysicalExaminationType() { return type; } + public static CodeableConcept getCarePlanType() { + CodeableConcept type = new CodeableConcept(); + Coding coding = type.addCoding(); + coding.setSystem(Constants.FHIR_SCT_SYSTEM); + coding.setCode("736368003"); // don't know + coding.setDisplay("Care Plan"); + return type; + } + public static CodeableConcept getProcedureType() { CodeableConcept type = new CodeableConcept(); Coding coding = type.addCoding(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDischargeSummaryBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDischargeSummaryBuilder.java new file mode 100644 index 00000000..04af4260 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDischargeSummaryBuilder.java @@ -0,0 +1,37 @@ +package org.bahmni.module.hip.web.service; + +import org.bahmni.module.hip.web.model.*; +import org.hl7.fhir.r4.model.Bundle; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class FhirBundledDischargeSummaryBuilder { + private final CareContextService careContextService; + private final OrganizationContextService organizationContextService; + private final FHIRResourceMapper fhirResourceMapper; + + @Autowired + public FhirBundledDischargeSummaryBuilder(CareContextService careContextService, OrganizationContextService organizationContextService, FHIRResourceMapper fhirResourceMapper) { + this.careContextService = careContextService; + this.organizationContextService = organizationContextService; + this.fhirResourceMapper = fhirResourceMapper; + } + + public DischargeSummaryBundle fhirBundleResponseFor (OpenMrsDischargeSummary openMrsDischargeSummary) { + + OrganizationContext organizationContext = organizationContextService.buildContext(); + + Bundle dischargeSummaryBundle = FhirDischargeSummary.fromOpenMrsDischargeSummary(openMrsDischargeSummary, fhirResourceMapper). + bundleDischargeSummary(organizationContext.webUrl()); + + CareContext careContext = careContextService.careContextFor( + openMrsDischargeSummary.getEncounter(), + organizationContext.careContextType()); + + return DischargeSummaryBundle.builder() + .bundle(dischargeSummaryBundle) + .careContext(careContext) + .build(); + } +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index 0c54452c..a04d8bff 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -10,41 +10,34 @@ import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.api.PatientService; -import org.openmrs.module.emrapi.conditionslist.Condition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Set; -import java.util.HashSet; -import java.util.Arrays; import java.util.List; import java.util.Date; import java.util.Map; import java.util.HashMap; -import java.util.ArrayList; import java.util.stream.Collectors; @Service public class OPConsultService { - public static Set conceptNames = new HashSet<>(Arrays.asList("Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", - "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", - "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Nutrition, Bal Vita Provided by FCHV","Bal Vita Provided by FCHV","ART, Condoms given","HIVTC, Marital Status","Malaria, Contact number", - "HIVTC, Transferred out", "HIVTC, Regimen when transferred out", "HIVTC, Date of transferred out", "HIVTC, Transferred out to", "HIVTC, Chief Complaint")); private final FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder; private final OPConsultDao opConsultDao; private final PatientService patientService; private final OpenMRSDrugOrderClient openMRSDrugOrderClient; - private final DiagnosticReportService diagnosticReportService; + private final ConsultationService consultationService; @Autowired - public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, OPConsultDao opConsultDao, - PatientService patientService, OpenMRSDrugOrderClient openMRSDrugOrderClient, - DiagnosticReportService diagnosticReportService) { + public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, + OPConsultDao opConsultDao, + PatientService patientService, + OpenMRSDrugOrderClient openMRSDrugOrderClient, + ConsultationService consultationService) { this.fhirBundledOPConsultBuilder = fhirBundledOPConsultBuilder; this.opConsultDao = opConsultDao; this.patientService = patientService; this.openMRSDrugOrderClient = openMRSDrugOrderClient; - this.diagnosticReportService = diagnosticReportService; + this.consultationService = consultationService; } public List getOpConsultsForVisit(String patientUuid, DateRange dateRange, String visitType) { @@ -52,14 +45,14 @@ public List getOpConsultsForVisit(String patientUuid, DateRange Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); - Map> encounterChiefComplaintsMap = getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); - Map> encounterMedicalHistoryMap = getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); - Map> encounterPhysicalExaminationMap = getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); + Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); - Map> encounterPatientDocumentsMap = getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); - Map> encounterOrdersMap = getEncounterOrdersMap(visitType, fromDate, toDate, patient); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, fromDate, toDate, patient); List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, @@ -69,33 +62,6 @@ public List getOpConsultsForVisit(String patientUuid, DateRange map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } - private Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { - List orders = opConsultDao.getOrders(patient, visitType, fromDate, toDate); - Map> encounterOrdersMap = new HashMap<>(); - for(Order order : orders){ - if (!encounterOrdersMap.containsKey(order.getEncounter())) { - encounterOrdersMap.put(order.getEncounter(), new ArrayList<>()); - } - encounterOrdersMap.get(order.getEncounter()).add(order); - } - return encounterOrdersMap; - } - - private Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { - final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); - Map> encounterPatientDocumentsMap = new HashMap<>(); - for (Encounter e : encounterDiagnosticReportsMap.keySet()) { - List patientDocuments = e.getAllObs().stream(). - filter(o -> (o.getEncounter().getEncounterType().getEncounterTypeId() == patientDocumentEncounterType && o.getValueText() == null)) - .collect(Collectors.toList()); - if (patientDocuments.size() > 0) { - encounterPatientDocumentsMap.put(e, patientDocuments); - } - } - return encounterPatientDocumentsMap; - } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { List obsProcedures = opConsultDao.getProcedures(patient, visitType, fromDate, toDate); Map encounterProcedureMap = new HashMap<>(); @@ -104,65 +70,4 @@ private Map getEncounterProcedureMap(Patient patient, String vis } return encounterProcedureMap; } - - private Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List physicalExaminations = opConsultDao.getPhysicalExamination(patient, visitType, fromDate, toDate); - Map> encounterPhysicalExaminationMap = new HashMap<>(); - for (Obs physicalExamination : physicalExaminations) { - Encounter encounter = physicalExamination.getEncounter(); - List groupMembers = new ArrayList<>(); - getGroupMembersOfObs(physicalExamination, groupMembers); - if (!encounterPhysicalExaminationMap.containsKey(encounter)) { - encounterPhysicalExaminationMap.put(encounter, new ArrayList<>()); - } - encounterPhysicalExaminationMap.get(encounter).addAll(groupMembers); - } - return encounterPhysicalExaminationMap; - } - - private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { - if (physicalExamination.getGroupMembers().size() > 0) { - for (Obs groupMember : physicalExamination.getGroupMembers()) { - if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; - getGroupMembersOfObs(groupMember, groupMembers); - } - } else { - groupMembers.add(physicalExamination); - } - } - - private Map> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List chiefComplaints = opConsultDao.getChiefComplaints(patient, visitType, fromDate, toDate); - HashMap> encounterChiefComplaintsMap = new HashMap<>(); - - for (Obs o : chiefComplaints) { - if(!encounterChiefComplaintsMap.containsKey(o.getEncounter())){ - encounterChiefComplaintsMap.put(o.getEncounter(), new ArrayList<>()); - } - encounterChiefComplaintsMap.get(o.getEncounter()).add(new OpenMrsCondition(o.getUuid(), o.getValueCoded().getDisplayString(), o.getDateCreated())); - } - return encounterChiefComplaintsMap; - } - - private Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { - Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); - List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); - Map> encounterMedicalHistoryMap = new HashMap<>(); - - for(Map.Entry> medicalHistory : medicalHistoryConditionsMap.entrySet()){ - if (!encounterMedicalHistoryMap.containsKey(medicalHistory.getKey())){ - encounterMedicalHistoryMap.put(medicalHistory.getKey(), new ArrayList<>()); - } - for(Condition condition : medicalHistory.getValue()){ - encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConcept().getDisplayString(), condition.getDateCreated())); - } - } - for(Obs obs : medicalHistoryDiagnosisMap){ - if (!encounterMedicalHistoryMap.containsKey(obs.getEncounter())){ - encounterMedicalHistoryMap.put(obs.getEncounter(), new ArrayList<>()); - } - encounterMedicalHistoryMap.get(obs.getEncounter()).add(new OpenMrsCondition(obs.getUuid(), obs.getValueCoded().getDisplayString(), obs.getDateCreated())); - } - return encounterMedicalHistoryMap; - } } From 115904b23467b9e73b4961830fd231c1345b6a8f Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Thu, 14 Oct 2021 15:49:57 +0530 Subject: [PATCH 136/264] 404|Sameera|Nazeer| Adds. delete both phrAddress and healthId based on action --- .../web/service/ExistingPatientService.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 28971936..53bfd3d9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -73,17 +73,21 @@ public void perform(String healthId, String action) { private void voidHealthId(Patient patient) { try { - PatientIdentifier patientIdentifier = patient.getPatientIdentifier(PHR_ADDRESS); - if(!patientIdentifier.getVoided()) patientService.voidPatientIdentifier(patientIdentifier,Status.DEACTIVATED.toString()); + PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(PHR_ADDRESS); + PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); + if (!patientIdentifierPhr.getVoided() && !patientIdentifierHealthId.getVoided()) { + patientService.voidPatientIdentifier(patientIdentifierPhr, Status.DEACTIVATED.toString()); + patientService.voidPatientIdentifier(patientIdentifierHealthId, Status.DEACTIVATED.toString()); + } } catch (NullPointerException ignored) { } } - private void unVoidHealthId(Patient patient,String healthId) { + private void unVoidHealthId(Patient patient, String phrAddress) { Set patientIdentifiers = patient.getIdentifiers(); try { - for (PatientIdentifier patientIdentifier:patientIdentifiers) { - if(patientIdentifier.getIdentifier().equals(healthId)){ + for (PatientIdentifier patientIdentifier : patientIdentifiers) { + if (patientIdentifier.getIdentifier().equals(phrAddress) || patientIdentifier.getIdentifierType().getName().equals(HEALTH_ID)) { patientIdentifier.setVoided(false); patientService.savePatientIdentifier(patientIdentifier); } @@ -94,9 +98,13 @@ private void unVoidHealthId(Patient patient,String healthId) { private void removeHealthId(Patient patient) { try { - PatientIdentifier patientIdentifier = patient.getPatientIdentifier(PHR_ADDRESS); - patient.removeIdentifier(patientIdentifier); - patientService.purgePatientIdentifier(patientIdentifier); + PatientIdentifier patientIdentifierPHR = patient.getPatientIdentifier(PHR_ADDRESS); + PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); + if (patientIdentifierHealthId != null && patientIdentifierPHR != null) { + patient.removeIdentifier(patientIdentifierPHR); + patient.removeIdentifier(patientIdentifierHealthId); + patientService.savePatient(patient); + } } catch (NullPointerException ignored) { } } From 47687b864ad2882f56d7dc3b3b0600b3f17bf2cc Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Thu, 14 Oct 2021 16:02:19 +0530 Subject: [PATCH 137/264] 404|Sameera|Nazeer| Refactor. delete and deactivate healthId and PhrAddress --- .../web/service/ExistingPatientService.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 53bfd3d9..434fb40e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -60,23 +60,23 @@ public String getHealthId(Patient patient) { public void perform(String healthId, String action) { Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); + PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(PHR_ADDRESS); + PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); if (action.equals(Status.DELETED.toString())) { - removeHealthId(patient); + removeHealthId(patient,patientIdentifierPhr,patientIdentifierHealthId); } if (action.equals(Status.DEACTIVATED.toString())) { - voidHealthId(patient); + voidHealthId(patientIdentifierPhr,patientIdentifierHealthId); } if (action.equals(Status.REACTIVATED.toString())) { unVoidHealthId(patient,healthId); } } - private void voidHealthId(Patient patient) { + private void voidHealthId(PatientIdentifier patientIdentifierPHR,PatientIdentifier patientIdentifierHealthId) { try { - PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(PHR_ADDRESS); - PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); - if (!patientIdentifierPhr.getVoided() && !patientIdentifierHealthId.getVoided()) { - patientService.voidPatientIdentifier(patientIdentifierPhr, Status.DEACTIVATED.toString()); + if (!patientIdentifierPHR.getVoided() && !patientIdentifierHealthId.getVoided()) { + patientService.voidPatientIdentifier(patientIdentifierPHR, Status.DEACTIVATED.toString()); patientService.voidPatientIdentifier(patientIdentifierHealthId, Status.DEACTIVATED.toString()); } } catch (NullPointerException ignored) { @@ -96,10 +96,8 @@ private void unVoidHealthId(Patient patient, String phrAddress) { } } - private void removeHealthId(Patient patient) { + private void removeHealthId(Patient patient,PatientIdentifier patientIdentifierPHR,PatientIdentifier patientIdentifierHealthId) { try { - PatientIdentifier patientIdentifierPHR = patient.getPatientIdentifier(PHR_ADDRESS); - PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); if (patientIdentifierHealthId != null && patientIdentifierPHR != null) { patient.removeIdentifier(patientIdentifierPHR); patient.removeIdentifier(patientIdentifierHealthId); From fcd32887489b41b311ad28dbcdd5712a1987668f Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Mon, 18 Oct 2021 17:57:26 +0530 Subject: [PATCH 138/264] 402|Sameera|Nazeer| Adds. api to check whether healthId or PhrAddress is deactivated --- .../hip/web/controller/PatientController.java | 18 ++++++++++++++++-- .../web/model/ExistingPatientIdentifier.java | 15 +++++++++++++++ .../web/service/ExistingPatientService.java | 14 ++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 9c0c69e2..31a1d17a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -5,6 +5,7 @@ import org.bahmni.module.hip.web.client.model.ErrorCode; import org.bahmni.module.hip.web.client.model.ErrorRepresentation; import org.bahmni.module.hip.web.model.ExistingPatient; +import org.bahmni.module.hip.web.model.ExistingPatientIdentifier; import org.bahmni.module.hip.web.service.ExistingPatientService; import org.bahmni.module.hip.web.service.ValidationService; import org.openmrs.Patient; @@ -57,10 +58,13 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat public ResponseEntity getExistingPatientsWithHealthId(@PathVariable String healthId) { String patientUuid = existingPatientService.getPatientWithHealthId(healthId); if (patientUuid != null) { + boolean isHealthIdVoided = existingPatientService.isHealthIdVoided(patientUuid); + ExistingPatientIdentifier existingPatientIdentifier = new ExistingPatientIdentifier(patientUuid,isHealthIdVoided); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(patientUuid); - } else { + .body(existingPatientIdentifier); + } + else { return ResponseEntity.ok() .body(new ErrorRepresentation(new Error(ErrorCode.PATIENT_ID_NOT_FOUND, "No patient found"))); } @@ -75,4 +79,14 @@ ResponseEntity perform(@RequestParam String healthId, @RequestParam String ac existingPatientService.perform(healthId, action); return ResponseEntity.ok().body(""); } + + @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/identifier/{patientUuid}") + @ResponseBody + public ResponseEntity getIdentifierStatus(@PathVariable String patientUuid) { + boolean isHealthIdVoided = existingPatientService.isHealthIdVoided(patientUuid); + ExistingPatientIdentifier existingPatientIdentifier = new ExistingPatientIdentifier(patientUuid,isHealthIdVoided); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(existingPatientIdentifier); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java new file mode 100644 index 00000000..90bded30 --- /dev/null +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java @@ -0,0 +1,15 @@ +package org.bahmni.module.hip.web.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.Setter; + +@Builder +@Getter +@Setter +@AllArgsConstructor +public class ExistingPatientIdentifier { + String patientUuid; + Boolean voided; +} diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 28971936..ac11ab48 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -199,4 +199,18 @@ private String getAddress(Patient patient) { public String getPatientWithHealthId(String healthId) { return existingPatientDao.getPatientUuidWithHealthId(healthId); } + + public boolean isHealthIdVoided(String uuid){ + Patient patient = patientService.getPatientByUuid(uuid); + Set patientIdentifiers = patient.getIdentifiers(); + try { + for (PatientIdentifier patientIdentifier:patientIdentifiers) { + if(patientIdentifier.getIdentifierType().getName().equals(HEALTH_ID) || patientIdentifier.getIdentifierType().getName().equals(PHR_ADDRESS)){ + return patientIdentifier.getVoided(); + } + } + } catch (NullPointerException ignored) { + } + return false; + } } From 7f3e720204accd5cce816e34ed057aa944377996 Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Fri, 22 Oct 2021 16:07:50 +0530 Subject: [PATCH 139/264] 402|Sameera| Adds. record with deactivated healthId should not be included in demographic match --- .../web/service/ExistingPatientService.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 85cf8e4e..645f7329 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -170,15 +170,17 @@ private List filterPatientsByGender(String patientGender, List< public List getMatchingPatientDetails(Set matchingPatients) { List existingPatients = new ArrayList<>(); for (Patient patient : matchingPatients) { - existingPatients.add( - new ExistingPatient( - patient.getGivenName() + " " + patient.getMiddleName() + " " + patient.getFamilyName(), - getYearOfBirth(patient.getBirthdate()).toString(), - getAddress(patient), - patient.getGender(), - patient.getUuid(), - getPhoneNumber(patient)) - ); + if (!isHealthIdVoided(patient.getUuid())) { + existingPatients.add( + new ExistingPatient( + patient.getGivenName() + " " + patient.getMiddleName() + " " + patient.getFamilyName(), + getYearOfBirth(patient.getBirthdate()).toString(), + getAddress(patient), + patient.getGender(), + patient.getUuid(), + getPhoneNumber(patient)) + ); + } } return existingPatients; } From 61cc35a6030a49a7bcd2bbcd0180d5557128052e Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Fri, 22 Oct 2021 17:46:34 +0530 Subject: [PATCH 140/264] 402|Sameera| Refactors. api to get healthId deactivation status --- .../module/hip/web/controller/PatientController.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 31a1d17a..58aa6fa7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -58,11 +58,9 @@ ResponseEntity getExistingPatients(@RequestParam(required = false) String pat public ResponseEntity getExistingPatientsWithHealthId(@PathVariable String healthId) { String patientUuid = existingPatientService.getPatientWithHealthId(healthId); if (patientUuid != null) { - boolean isHealthIdVoided = existingPatientService.isHealthIdVoided(patientUuid); - ExistingPatientIdentifier existingPatientIdentifier = new ExistingPatientIdentifier(patientUuid,isHealthIdVoided); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(existingPatientIdentifier); + .body(patientUuid); } else { return ResponseEntity.ok() @@ -80,13 +78,12 @@ ResponseEntity perform(@RequestParam String healthId, @RequestParam String ac return ResponseEntity.ok().body(""); } - @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/identifier/{patientUuid}") + @RequestMapping(method = RequestMethod.GET, value = "/existingPatients/IdDeactivationStatus/{patientUuid}") @ResponseBody public ResponseEntity getIdentifierStatus(@PathVariable String patientUuid) { boolean isHealthIdVoided = existingPatientService.isHealthIdVoided(patientUuid); - ExistingPatientIdentifier existingPatientIdentifier = new ExistingPatientIdentifier(patientUuid,isHealthIdVoided); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(existingPatientIdentifier); + .body(isHealthIdVoided); } } From 81c18bf52f73bfce3462647867e05823f4dd7c2e Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Fri, 22 Oct 2021 18:04:07 +0530 Subject: [PATCH 141/264] 402|Sameera|Refactors. removed unused class and imports --- .../hip/web/controller/PatientController.java | 1 - .../hip/web/model/ExistingPatientIdentifier.java | 15 --------------- 2 files changed, 16 deletions(-) delete mode 100644 omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java index 58aa6fa7..2e6ae7c7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PatientController.java @@ -5,7 +5,6 @@ import org.bahmni.module.hip.web.client.model.ErrorCode; import org.bahmni.module.hip.web.client.model.ErrorRepresentation; import org.bahmni.module.hip.web.model.ExistingPatient; -import org.bahmni.module.hip.web.model.ExistingPatientIdentifier; import org.bahmni.module.hip.web.service.ExistingPatientService; import org.bahmni.module.hip.web.service.ValidationService; import org.openmrs.Patient; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java deleted file mode 100644 index 90bded30..00000000 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatientIdentifier.java +++ /dev/null @@ -1,15 +0,0 @@ -package org.bahmni.module.hip.web.model; - -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Getter; -import lombok.Setter; - -@Builder -@Getter -@Setter -@AllArgsConstructor -public class ExistingPatientIdentifier { - String patientUuid; - Boolean voided; -} From 2fcb1e49dd7080f00e0061ebf8678c4198c05ec8 Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Mon, 25 Oct 2021 15:14:05 +0530 Subject: [PATCH 142/264] Sameera|Adds. delete healthId will remove healthId or PhrAddress or both which is stored --- .../module/hip/web/service/ExistingPatientService.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 434fb40e..013e4df6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -98,11 +98,11 @@ private void unVoidHealthId(Patient patient, String phrAddress) { private void removeHealthId(Patient patient,PatientIdentifier patientIdentifierPHR,PatientIdentifier patientIdentifierHealthId) { try { - if (patientIdentifierHealthId != null && patientIdentifierPHR != null) { - patient.removeIdentifier(patientIdentifierPHR); + if (patientIdentifierHealthId != null) patient.removeIdentifier(patientIdentifierHealthId); - patientService.savePatient(patient); - } + if(patientIdentifierPHR != null) + patient.removeIdentifier(patientIdentifierPHR); + patientService.savePatient(patient); } catch (NullPointerException ignored) { } } From 88c616017be2fffacbe95ac4ea310497fd98d86b Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Tue, 26 Oct 2021 11:39:13 +0530 Subject: [PATCH 143/264] 400|Sameera|Nazeer| Adds. fixed a bug on fetching discharge summary --- .../bahmni/module/hip/web/model/OpenMrsDischargeSummary.java | 3 ++- .../bahmni/module/hip/web/service/ConsultationService.java | 5 +++-- .../module/hip/web/service/DischargeSummaryService.java | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java index 476660e3..c63b1d7a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; @Getter public class OpenMrsDischargeSummary { @@ -52,7 +53,7 @@ public OpenMrsDischargeSummary(Encounter encounter, } public static List getOpenMrsDischargeSummaryList(Map> encounterCarePlanMap, Map encounterDrugOrdersMap, - Map> encounterChiefComplaintsMap, + ConcurrentHashMap> encounterChiefComplaintsMap, Map> encounterMedicalHistoryMap, Map> encounterPhysicalExaminationMap, Map> encounterPatientDocumentsMap, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index da2dea48..d0878581 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -19,6 +19,7 @@ import java.util.Set; import java.util.HashSet; import java.util.Arrays; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -39,9 +40,9 @@ public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsu this.diagnosticReportService = diagnosticReportService; } - public Map> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { + public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, fromDate, toDate); - HashMap> encounterChiefComplaintsMap = new HashMap<>(); + ConcurrentHashMap> encounterChiefComplaintsMap = new ConcurrentHashMap<>(); for (Obs o : chiefComplaints) { if(!encounterChiefComplaintsMap.containsKey(o.getEncounter())){ diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index 085f277e..88ececee 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.ArrayList; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @Service @@ -49,7 +50,7 @@ public List getDischargeSummaryForVisit(String patientUu Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, fromDate, toDate); DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); + ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); From 8445c995738f977021d72d1c9f58a4ce06735317 Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Fri, 29 Oct 2021 17:44:50 +0530 Subject: [PATCH 144/264] 399|Sameera|Nazeer|Adds. discharge summary for Program based visit --- api/pom.xml | 8 +- .../module/hip/api/dao/ConsultationDao.java | 3 + .../hip/api/dao/DischargeSummaryDao.java | 2 + .../module/hip/api/dao/OPConsultDao.java | 2 + .../hip/api/dao/impl/ConsultationDaoImpl.java | 88 ++++++++++++++- .../api/dao/impl/DischargeSummaryDaoImpl.java | 56 +++++++++- .../hip/api/dao/impl/OPConsultDaoImpl.java | 89 ++++++++++++++- omod/pom.xml | 6 + .../DischargeSummaryController.java | 31 +++++- .../hip/web/service/ConsultationService.java | 103 +++++++++++++----- .../web/service/DiagnosticReportService.java | 2 +- .../web/service/DischargeSummaryService.java | 43 +++++++- 12 files changed, 388 insertions(+), 45 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index b9621101..57494827 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -35,5 +35,11 @@ 1.18.10 provided - + + org.openmrs.module + episodes-api + 1.0-SNAPSHOT + compile + + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java index c9f3c278..71effc8c 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java @@ -8,6 +8,9 @@ public interface ConsultationDao { List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate); + List getChiefComplaintForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); List getOrders(Patient patient, String visit, Date fromDate, Date toDate); + List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient); + List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java index 3337fffa..43191de4 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java @@ -8,4 +8,6 @@ public interface DischargeSummaryDao { List getCarePlan(Patient patient, String visit, Date fromDate, Date toDate); List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); + List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index c234dca8..df4e28dc 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -13,4 +13,6 @@ public interface OPConsultDao { Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate); List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); + List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 8eaeb30c..f6a24fa3 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -1,19 +1,26 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.ConsultationDao; +import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; +import org.openmrs.PatientProgram; import org.openmrs.api.ObsService; import org.openmrs.api.OrderService; +import org.openmrs.api.ProgramWorkflowService; +import org.openmrs.module.episodes.Episode; +import org.openmrs.module.episodes.service.EpisodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.util.List; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.HashSet; +import java.util.List; import java.util.Objects; -import java.util.Arrays; +import java.util.Set; import java.util.stream.Collectors; @Repository @@ -25,12 +32,18 @@ public class ConsultationDaoImpl implements ConsultationDao { public static final String CONSULTATION = "Consultation"; public static final String CHIEF_COMPLAINT = "Chief Complaint"; public static final String ORDER_ACTION = "DISCONTINUE"; - public static final ArrayList ORDER_TYPES = new ArrayList() {{ add("Lab Order"); }}; + public static final ArrayList ORDER_TYPES = new ArrayList() {{ + add("Lab Order"); + }}; + private final ProgramWorkflowService programWorkflowService; + private final EpisodeService episodeService; @Autowired - public ConsultationDaoImpl(ObsService obsService, OrderService orderService) { + public ConsultationDaoImpl(ObsService obsService, OrderService orderService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { this.obsService = obsService; this.orderService = orderService; + this.programWorkflowService = programWorkflowService; + this.episodeService = episodeService; } @Override @@ -53,6 +66,35 @@ public List getChiefComplaints(Patient patient, String visit, Date fromDate return chiefComplaintObsMap; } + @Override + public List getChiefComplaintForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List obs = getAllObs(programName, fromDate, toDate, patient); + List obsSet = new ArrayList<>(); + for (Obs o : obs) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) + && o.getValueCoded() != null + && o.getConcept().getName().getLocalePreferred()) { + obsSet.add(o); + } + } + return obsSet; + } + + public List getAllObs(String programName, Date fromDate, Date toDate, Patient patient) { + List patientPrograms = programWorkflowService.getPatientPrograms(patient, programWorkflowService.getProgramByName(programName), fromDate, toDate, null, null, false); + Set patientProgramSet = new HashSet<>(patientPrograms); + List obs = new ArrayList<>(); + for (PatientProgram patientProgram : patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter : encounterSet) { + obs.addAll(encounter.getAllObs()); + } + } + return obs; + } + @Override public List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate) { final String[] formNames = new String[]{"Discharge Summary","Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", @@ -91,4 +133,42 @@ public List getOrders(Patient patient, String visit, Date fromDate, Date private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } + + @Override + public List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List orderSet = new ArrayList<>(); + List patientPrograms = programWorkflowService.getPatientPrograms(patient, programWorkflowService.getProgramByName(programName), fromDate, toDate, null, null, false); + Set patientProgramSet = new HashSet<>(patientPrograms); + for (PatientProgram patientProgram : patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter : encounterSet) { + for (Order order : encounter.getOrders()) { + if (order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION) && ORDER_TYPES.contains(order.getOrderType().getName())) { + orderSet.add(order); + } + } + } + } + return orderSet; + } + + @Override + public List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", + "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; + List physicalExaminationObsMap = new ArrayList<>(); + List obs = getAllObs(programName, fromDate, toDate, patient); + for (Obs o : obs) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getValueCoded() == null + && o.getConcept().getName().getLocalePreferred() + && o.getObsGroup() == null + && !Arrays.asList(formNames).contains(o.getConcept().getName().getName())) { + physicalExaminationObsMap.add(o); + } + } + return physicalExaminationObsMap; + } } + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index c6d506b3..1280a2d7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -1,16 +1,23 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.DischargeSummaryDao; +import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; +import org.openmrs.PatientProgram; import org.openmrs.api.ObsService; +import org.openmrs.api.ProgramWorkflowService; +import org.openmrs.module.episodes.Episode; +import org.openmrs.module.episodes.service.EpisodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.ArrayList; import java.util.Date; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; @Repository @@ -19,10 +26,14 @@ public class DischargeSummaryDaoImpl implements DischargeSummaryDao { public static final String CONSULTATION = "Consultation"; public static final String PROCEDURE_NOTES = "Procedure Notes"; private final ObsService obsService; + private final ProgramWorkflowService programWorkflowService; + private final EpisodeService episodeService; @Autowired - public DischargeSummaryDaoImpl(ObsService obsService) { + public DischargeSummaryDaoImpl(ObsService obsService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { this.obsService = obsService; + this.programWorkflowService = programWorkflowService; + this.episodeService = episodeService; } private boolean matchesVisitType(String visitType, Obs obs) { @@ -44,6 +55,27 @@ public List getCarePlan(Patient patient, String visit, Date fromDate, Date return carePlanObs; } + @Override + public List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + final String obsName = "Discharge Summary"; + List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); + Set patientProgramSet = new HashSet<>(patientPrograms); + List carePlanObs= new ArrayList<>(); + for (PatientProgram patientProgram: patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter : encounterSet) { + for (Obs o : encounter.getAllObs()) { + if (obsName.equals(o.getConcept().getName().getName()) + && o.getConcept().getName().getLocalePreferred()) { + carePlanObs.add(o); + } + } + } + } + return carePlanObs; + } + @Override public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { List patientObs = obsService.getObservationsByPerson(patient); @@ -62,4 +94,26 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat } return proceduresObsMap; } + + @Override + public List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); + Set patientProgramSet = new HashSet<>(patientPrograms); + List proceduresObsSet= new ArrayList<>(); + for (PatientProgram patientProgram: patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter : encounterSet) { + for (Obs o : encounter.getAllObs()) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getObsGroup() == null + && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + ) { + proceduresObsSet.add(o); + } + } + } + } + return proceduresObsSet; + } } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 01f2e577..bcafa74b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -3,18 +3,25 @@ import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; +import org.openmrs.PatientProgram; import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; +import org.openmrs.api.ProgramWorkflowService; import org.openmrs.module.emrapi.conditionslist.Condition; import org.openmrs.module.emrapi.conditionslist.ConditionService; +import org.openmrs.module.episodes.Episode; +import org.openmrs.module.episodes.service.EpisodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.util.Objects; -import java.util.List; + +import java.util.ArrayList; import java.util.Date; -import java.util.Map; import java.util.HashMap; -import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; @Repository @@ -26,13 +33,17 @@ public class OPConsultDaoImpl implements OPConsultDao { private final ObsService obsService; private final ConditionService conditionService; private final EncounterService encounterService; + private final ProgramWorkflowService programWorkflowService; + private final EpisodeService episodeService; @Autowired - public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService) { + public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { this.obsService = obsService; this.conditionService = conditionService; this.encounterService = encounterService; + this.programWorkflowService = programWorkflowService; + this.episodeService = episodeService; } @Override @@ -112,4 +123,72 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat } return proceduresObsMap; } + + @Override + public Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + final String conditionStatusHistoryOf = "HISTORY_OF"; + final String conditionStatusActive = "ACTIVE"; + List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); + List encounterList = new ArrayList<>(); + Set patientProgramSet = new HashSet<>(patientPrograms); + for (PatientProgram patientProgram: patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + encounterList.addAll(episode.getEncounters()); + } + List encounters = encounterList + .stream() + .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation")) + .collect(Collectors.toList()); + Set conditions = conditionService.getActiveConditions(patient) + .stream() + .filter(condition -> condition.getStatus().name().equals(conditionStatusActive) || + condition.getStatus().name().equals(conditionStatusHistoryOf)) + .collect(Collectors.toSet()); + + Map> encounterConditionsMap = new HashMap<>(); + + for(Condition condition : conditions){ + for(Encounter encounter : encounters){ + Encounter nextEncounter; + Date nextEncounterDate = new Date(); + if(encounters.indexOf(encounter) < (encounters.size() - 1)){ + nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); + nextEncounterDate = nextEncounter.getDateCreated(); + } + if(condition.getDateCreated().equals(encounter.getDateCreated()) || condition.getDateCreated().after(encounter.getDateCreated()) && condition.getDateCreated().before(nextEncounterDate)) { + if(encounterConditionsMap.containsKey(encounter)) { + encounterConditionsMap.get(encounter).add(condition); + } else { + encounterConditionsMap.put(encounter, new ArrayList() {{ + add(condition); + }}); + } + } + } + } + return encounterConditionsMap; + } + + @Override + public List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); + Set patientProgramSet = new HashSet<>(patientPrograms); + List obsSet= new ArrayList<>(); + for (PatientProgram patientProgram: patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter: encounterSet) { + for(Obs o : encounter.getAllObs()){ + if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && Objects.equals(o.getConcept().getName().getName(), CODED_DIAGNOSIS) + && o.getValueCoded() != null + && o.getConcept().getName().getLocalePreferred()) + { + obsSet.add(o); + } + } + } + } + return obsSet; + } } diff --git a/omod/pom.xml b/omod/pom.xml index fc56ae97..1f37efda 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -30,6 +30,12 @@ + + org.openmrs.module + episodes-api + 1.0-SNAPSHOT + provided + org.bahmni.module hipmodule-api diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java index a5f95306..77efcec3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -1,9 +1,9 @@ package org.bahmni.module.hip.web.controller; import org.bahmni.module.hip.web.client.ClientError; -import org.bahmni.module.hip.web.model.DischargeSummaryBundle; -import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.model.BundledDischargeSummaryResponse; +import org.bahmni.module.hip.web.model.DateRange; +import org.bahmni.module.hip.web.model.DischargeSummaryBundle; import org.bahmni.module.hip.web.service.DischargeSummaryService; import org.bahmni.module.hip.web.service.ValidationService; import org.openmrs.module.webservices.rest.web.RestConstants; @@ -18,6 +18,8 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestParam; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.text.ParseException; import java.util.List; @@ -58,6 +60,31 @@ ResponseEntity get(@RequestParam String patientId, .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); } + + @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity get( + @RequestParam String patientId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String programName, + @RequestParam String programEnrollmentId + ) throws ParseException, UnsupportedEncodingException { + programName = URLDecoder.decode(programName, "UTF-8"); + if (patientId == null || patientId.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + if (programName == null || programName.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noProgramNameProvided()); + if (!validationService.isValidProgram(programName)) + return ResponseEntity.badRequest().body(ClientError.invalidProgramName()); + if (!validationService.isValidPatient(patientId)) + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + List dischargeSummaryBundle = + dischargeSummaryService.getDischargeSummaryForProgram(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), programName, programEnrollmentId); + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index d0878581..0366b4c0 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -11,14 +11,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; -import java.util.HashMap; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; -import java.util.Set; +import java.util.HashMap; import java.util.HashSet; -import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -42,6 +42,59 @@ public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsu public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, fromDate, toDate); + return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); + } + + public ConcurrentHashMap> getEncounterChiefComplaintsMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List chiefComplaints = consultationDao.getChiefComplaintForProgram(programName,fromDate, toDate,patient); + return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); + } + + public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { + List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, fromDate, toDate); + return getEncounterListMapForPhysicalExamination(physicalExaminations); + } + + public Map> getEncounterPhysicalExaminationMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List physicalExaminations = consultationDao.getPhysicalExaminationForProgram(programName,fromDate,toDate,patient); + return getEncounterListMapForPhysicalExamination(physicalExaminations); + } + + public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); + return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); + } + + public Map> getEncounterMedicalHistoryConditionsMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditionsForProgram(programName,fromDate,toDate,patient); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosisForProgram(programName,fromDate,toDate,patient); + return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); + } + + public Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { + final int patientDocumentEncounterType = 9; + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); + return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); + } + + public Map> getEncounterPatientDocumentsMapForProgram(String programName, Date fromDate, Date toDate, Patient patient,String programEnrollmentId) { + final int patientDocumentEncounterType = 9; + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForPrograms(fromDate,toDate,patient, programName, programEnrollmentId) ; + return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); + } + + public Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { + List orders = consultationDao.getOrders(patient, visitType, fromDate, toDate); + return getEncounterListMapForOrders(orders); + } + + public Map> getEncounterOrdersMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List orders = consultationDao.getOrdersForProgram(programName,fromDate, toDate,patient); + return getEncounterListMapForOrders(orders); + } + + private ConcurrentHashMap> getEncounterListConcurrentHashMapForChiefComplaint(List chiefComplaints) { ConcurrentHashMap> encounterChiefComplaintsMap = new ConcurrentHashMap<>(); for (Obs o : chiefComplaints) { @@ -53,9 +106,21 @@ public ConcurrentHashMap> getEncounterChiefCom return encounterChiefComplaintsMap; } - public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { - Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); - List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); + private Map> getEncounterListMapForPhysicalExamination(List physicalExaminations) { + Map> encounterPhysicalExaminationMap = new HashMap<>(); + for (Obs physicalExamination : physicalExaminations) { + Encounter encounter = physicalExamination.getEncounter(); + List groupMembers = new ArrayList<>(); + getGroupMembersOfObs(physicalExamination, groupMembers); + if (!encounterPhysicalExaminationMap.containsKey(encounter)) { + encounterPhysicalExaminationMap.put(encounter, new ArrayList<>()); + } + encounterPhysicalExaminationMap.get(encounter).addAll(groupMembers); + } + return encounterPhysicalExaminationMap; + } + + private Map> getEncounterListMapForMedicalHistory(Map> medicalHistoryConditionsMap, List medicalHistoryDiagnosisMap) { Map> encounterMedicalHistoryMap = new HashMap<>(); for(Map.Entry> medicalHistory : medicalHistoryConditionsMap.entrySet()){ @@ -75,24 +140,7 @@ public Map> getEncounterMedicalHistoryConditio return encounterMedicalHistoryMap; } - public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, fromDate, toDate); - Map> encounterPhysicalExaminationMap = new HashMap<>(); - for (Obs physicalExamination : physicalExaminations) { - Encounter encounter = physicalExamination.getEncounter(); - List groupMembers = new ArrayList<>(); - getGroupMembersOfObs(physicalExamination, groupMembers); - if (!encounterPhysicalExaminationMap.containsKey(encounter)) { - encounterPhysicalExaminationMap.put(encounter, new ArrayList<>()); - } - encounterPhysicalExaminationMap.get(encounter).addAll(groupMembers); - } - return encounterPhysicalExaminationMap; - } - - public Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { - final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); + private Map> getEncounterListMapForPatientDocument(int patientDocumentEncounterType, Map> encounterDiagnosticReportsMap) { Map> encounterPatientDocumentsMap = new HashMap<>(); for (Encounter e : encounterDiagnosticReportsMap.keySet()) { List patientDocuments = e.getAllObs().stream(). @@ -105,8 +153,7 @@ public Map> getEncounterPatientDocumentsMap(String visitTyp return encounterPatientDocumentsMap; } - public Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { - List orders = consultationDao.getOrders(patient, visitType, fromDate, toDate); + private Map> getEncounterListMapForOrders(List orders) { Map> encounterOrdersMap = new HashMap<>(); for(Order order : orders){ if (!encounterOrdersMap.containsKey(order.getEncounter())) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 0bad9135..3f225b45 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -104,7 +104,7 @@ public List getDiagnosticReportsForProgram(String patien } - private HashMap> getAllObservationsForPrograms(Date fromDate, Date toDate, + public HashMap> getAllObservationsForPrograms(Date fromDate, Date toDate, Patient patient, String programName, String programEnrollmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index 88ececee..4f1157a4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -16,10 +16,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.ArrayList; import java.util.Date; import java.util.HashMap; -import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.stream.Collectors; @@ -32,7 +32,6 @@ public class DischargeSummaryService { private final FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder; private final OpenMRSDrugOrderClient openMRSDrugOrderClient; private final ConsultationService consultationService; - private Log log = LogFactory.getLog(this.getClass()); @Autowired public DischargeSummaryService(PatientService patientService, DischargeSummaryDao dischargeSummaryDao, FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder, OpenMRSDrugOrderClient openMRSDrugOrderClient, ConsultationService consultationService) { @@ -61,8 +60,30 @@ public List getDischargeSummaryForVisit(String patientUu return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } + public List getDischargeSummaryForProgram(String patientUuid, DateRange dateRange, String programName,String programEnrollmentId){ + Date fromDate = dateRange.getFrom(); + Date toDate = dateRange.getTo(); + Patient patient = patientService.getPatientByUuid(patientUuid); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndProgramFor(patientUuid, dateRange, programName,programEnrollmentId)); + Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); + ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMapForProgram(programName,fromDate, toDate,patient); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMapForProgram(programName,fromDate,toDate,patient); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMapForProgram(programName,fromDate, toDate,patient); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMapForProgram(programName,fromDate, toDate,patient); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMapForProgram(programName,fromDate,toDate,patient,programEnrollmentId); + Map encounterProcedureMap = getEncounterProcedureMapForProgram(programName,fromDate,toDate,patient); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMapForProgram(programName,fromDate,toDate,patient); + List openMrsDischargeSummaryList = OpenMrsDischargeSummary.getOpenMrsDischargeSummaryList(encounterDischargeSummaryMap, encounteredDrugOrdersMap, encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounterPatientDocumentsMap, encounterProcedureMap, encounterOrdersMap, patient); + return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); + } + + private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date fromDate, Date toDate) { List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType, fromDate, toDate); + return getEncounterListMapForCarePlan(carePlanObs); + } + + private Map> getEncounterListMapForCarePlan(List carePlanObs) { Map> encounterCarePlanMap = new HashMap<>(); for(Obs obs : carePlanObs){ Encounter encounter = obs.getEncounter(); @@ -74,6 +95,11 @@ private Map> getEncounterCarePlanMap(Patient patient, Strin return encounterCarePlanMap; } + private Map> getEncounterCarePlanMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List carePlanObs = dischargeSummaryDao.getCarePlanForProgram(programName,fromDate, toDate,patient); + return getEncounterListMapForCarePlan(carePlanObs); + } + private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, fromDate, toDate); Map encounterProcedureMap = new HashMap<>(); @@ -82,4 +108,15 @@ private Map getEncounterProcedureMap(Patient patient, String vis } return encounterProcedureMap; } + + private Map getEncounterProcedureMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List obsProcedures = dischargeSummaryDao.getProceduresForProgram(programName,fromDate, toDate,patient); + Map encounterProcedureMap = new HashMap<>(); + for(Obs o: obsProcedures){ + encounterProcedureMap.put(o.getEncounter(), o); + } + return encounterProcedureMap; + } + + } From 51bb724c5303fbea6a63476f5615cadd7ee04dce Mon Sep 17 00:00:00 2001 From: SanoferSameera <79590907+SanoferSameera@users.noreply.github.com> Date: Tue, 2 Nov 2021 12:34:19 +0530 Subject: [PATCH 145/264] 349|Sameera|Umair|Arjun| Adds. OPD notes based on program based visit (#57) Co-authored-by: Sanofer Sameera S --- .../module/hip/api/dao/OPConsultDao.java | 1 + .../hip/api/dao/impl/ConsultationDaoImpl.java | 2 +- .../hip/api/dao/impl/OPConsultDaoImpl.java | 22 +++++++++++++ .../web/controller/OPConsultController.java | 28 +++++++++++++++++ .../hip/web/service/OPConsultService.java | 31 +++++++++++++++++++ 5 files changed, 83 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index df4e28dc..419257a2 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -13,6 +13,7 @@ public interface OPConsultDao { Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate); List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index f6a24fa3..3b4dab28 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -34,6 +34,7 @@ public class ConsultationDaoImpl implements ConsultationDao { public static final String ORDER_ACTION = "DISCONTINUE"; public static final ArrayList ORDER_TYPES = new ArrayList() {{ add("Lab Order"); + add(RADIOLOGY_ORDER); }}; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; @@ -120,7 +121,6 @@ public List getPhysicalExamination(Patient patient, String visit, Date from @Override public List getOrders(Patient patient, String visit, Date fromDate, Date toDate) { - if(Objects.equals(visit, OPD)) { ORDER_TYPES.add(RADIOLOGY_ORDER); } List orders = orderService.getAllOrdersByPatient(patient); return orders.stream().filter(order -> matchesVisitType(visit, order)) .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate)) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index bcafa74b..8b3e051a 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -124,6 +124,28 @@ public List getProcedures(Patient patient, String visit, Date fromDate, Dat return proceduresObsMap; } + @Override + public List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); + Set patientProgramSet = new HashSet<>(patientPrograms); + List proceduresObsSet= new ArrayList<>(); + for (PatientProgram patientProgram: patientProgramSet) { + Episode episode = episodeService.getEpisodeForPatientProgram(patientProgram); + Set encounterSet = episode.getEncounters(); + for (Encounter encounter : encounterSet) { + for (Obs o : encounter.getAllObs()) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && !o.getVoided() + && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + ) { + proceduresObsSet.add(o); + } + } + } + } + return proceduresObsSet; + } + @Override public Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient) { final String conditionStatusHistoryOf = "HISTORY_OF"; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java index eb8841ef..d923b17f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -14,6 +14,8 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; import java.text.ParseException; import java.util.List; @@ -52,4 +54,30 @@ ResponseEntity get(@RequestParam String patientId, .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledOPConsultResponse(opConsultBundle)); } + + @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) + public @ResponseBody + ResponseEntity get( + @RequestParam String patientId, + @RequestParam String fromDate, + @RequestParam String toDate, + @RequestParam String programName, + @RequestParam String programEnrollmentId) + throws ParseException , UnsupportedEncodingException { + programName = URLDecoder.decode(programName, "UTF-8"); + if (patientId == null || patientId.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); + if (programName == null || programName.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noProgramNameProvided()); + if (!validationService.isValidProgram(programName)) + return ResponseEntity.badRequest().body(ClientError.invalidProgramName()); + if (!validationService.isValidPatient(patientId)) + return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); + List opConsultBundle = + opConsultService.getOpConsultsForProgram(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), programName, programEnrollmentId); + + return ResponseEntity.ok() + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) + .body(new BundledOPConsultResponse(opConsultBundle)); + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index a04d8bff..21f09a05 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -62,6 +62,28 @@ public List getOpConsultsForVisit(String patientUuid, DateRange map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } + public List getOpConsultsForProgram(String patientUuid, DateRange dateRange, String programName,String programEnrollmentId) { + Date fromDate = dateRange.getFrom(); + Date toDate = dateRange.getTo(); + Patient patient = patientService.getPatientByUuid(patientUuid); + + Map> encounterChiefComplaintsMap = consultationService. getEncounterChiefComplaintsMapForProgram(programName,fromDate,toDate,patient); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMapForProgram(programName,fromDate,toDate,patient); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMapForProgram(programName,fromDate,toDate,patient); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndProgramFor(patientUuid, dateRange,programName,programEnrollmentId)); + Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); + Map encounterProcedureMap = getEncounterProcedureMapForProgram(programName,fromDate,toDate,patient); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMapForProgram(programName,fromDate,toDate,patient,programEnrollmentId); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMapForProgram(programName,fromDate,toDate,patient); + + List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, + encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, + encounterPatientDocumentsMap, encounterOrdersMap, patient); + + return openMrsOPConsultList.stream(). + map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); + } + private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { List obsProcedures = opConsultDao.getProcedures(patient, visitType, fromDate, toDate); Map encounterProcedureMap = new HashMap<>(); @@ -70,4 +92,13 @@ private Map getEncounterProcedureMap(Patient patient, String vis } return encounterProcedureMap; } + + private Map getEncounterProcedureMapForProgram(String programName, Date fromDate, Date toDate, Patient patient) { + List obsProcedures = opConsultDao.getProceduresForProgram(programName,fromDate, toDate,patient); + Map encounterProcedureMap = new HashMap<>(); + for(Obs o: obsProcedures){ + encounterProcedureMap.put(o.getEncounter(), o); + } + return encounterProcedureMap; + } } From b5326391e17e9cc879aee1cbdf55e13136077528 Mon Sep 17 00:00:00 2001 From: rohit-yawalkar Date: Mon, 8 Nov 2021 21:23:24 +0530 Subject: [PATCH 146/264] [Rohit|Sameera] - Resolves null pointer exception in fetching condition records of discharge summary records --- .../bahmni/module/hip/web/model/OpenMrsDischargeSummary.java | 4 ++-- .../module/hip/web/service/DischargeSummaryService.java | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java index c63b1d7a..7b477195 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java @@ -168,7 +168,7 @@ public static List getOpenMrsDischargeSummaryList(Map> medicalHistoryEntry : encounterMedicalHistoryMap.entrySet()){ - List medicalHistoryList = getEncounterConditions(encounterChiefComplaintsMap, medicalHistoryEntry.getKey()); + List encounterConditions = encounterMedicalHistoryMap.get(medicalHistoryEntry.getKey()); List physicalExaminationList = new ArrayList<>(); List patientDocumentList = new ArrayList<>(); List orderList = new ArrayList<>(); @@ -189,7 +189,7 @@ public static List getOpenMrsDischargeSummaryList(Map(), new ArrayList<>(), patient, medicalHistoryEntry.getKey().getEncounterProviders(), new ArrayList<>(), medicalHistoryList, patientDocumentList, physicalExaminationList, procedure, orderList)); + openMrsDischargeSummaryList.add(new OpenMrsDischargeSummary(medicalHistoryEntry.getKey(), new ArrayList<>(), new ArrayList<>(), patient, medicalHistoryEntry.getKey().getEncounterProviders(), new ArrayList<>(), encounterConditions, patientDocumentList, physicalExaminationList, procedure, orderList)); } for(Map.Entry> physicalExaminationEntry : encounterPhysicalExaminationMap.entrySet()){ diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index 4f1157a4..0c6672d6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.service; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.bahmni.module.hip.api.dao.DischargeSummaryDao; import org.bahmni.module.hip.web.model.OpenMrsCondition; import org.bahmni.module.hip.web.model.DateRange; From 598289e6576bb2dd7094f445ff5d733a159f147c Mon Sep 17 00:00:00 2001 From: Sanofer Sameera S Date: Tue, 9 Nov 2021 11:46:51 +0530 Subject: [PATCH 147/264] Sameera|Rohit| Refactors. removed redundant code --- .../module/hip/web/model/OpenMrsDischargeSummary.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java index 7b477195..bc0ab666 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsDischargeSummary.java @@ -143,7 +143,7 @@ public static List getOpenMrsDischargeSummaryList(Map patientDocumentList = new ArrayList<>(); List orderList = new ArrayList<>(); Obs procedure = null; - List chiefComplaintList = getEncounterConditions(encounterChiefComplaintsMap, encounterListEntry.getKey()); + List chiefComplaintList = encounterChiefComplaintsMap.get(encounterListEntry.getKey()); if(encounterMedicalHistoryMap.get(encounterListEntry.getKey()) != null) { medicalHistoryList = getEncounterConditions(encounterMedicalHistoryMap, encounterListEntry.getKey()); encounterMedicalHistoryMap.remove(encounterListEntry.getKey()); @@ -193,7 +193,7 @@ public static List getOpenMrsDischargeSummaryList(Map> physicalExaminationEntry : encounterPhysicalExaminationMap.entrySet()){ - List physicalExaminationList = getEncounterObs(encounterPhysicalExaminationMap, physicalExaminationEntry.getKey()); + List physicalExaminationList = encounterPhysicalExaminationMap.get(physicalExaminationEntry.getKey()); List patientDocumentList = new ArrayList<>(); List orderList = new ArrayList<>(); Obs procedure = null; @@ -213,7 +213,7 @@ public static List getOpenMrsDischargeSummaryList(Map> patientDocumentEntry : encounterPatientDocumentsMap.entrySet()){ - List patientDocumentList = getEncounterObs(encounterPatientDocumentsMap, patientDocumentEntry.getKey()); + List patientDocumentList = encounterPatientDocumentsMap.get(patientDocumentEntry.getKey()); List orderList = new ArrayList<>(); Obs procedure = null; if(encounterProcedureNotesMap.get(patientDocumentEntry.getKey()) != null) { @@ -228,7 +228,7 @@ public static List getOpenMrsDischargeSummaryList(Map procedureMapEntry : encounterProcedureNotesMap.entrySet()){ - Obs procedure = getEncounterObsProcedure(encounterProcedureNotesMap, procedureMapEntry.getKey()); + Obs procedure = encounterProcedureNotesMap.get(procedureMapEntry.getKey()); List orderList = new ArrayList<>(); if(encounterOrdersMap.get(procedureMapEntry.getKey()) != null) { orderList = getEncounterOrders(encounterOrdersMap, procedureMapEntry.getKey()); From 23e5b601bf6fbb5016eb379dd841f5ea5681e9f2 Mon Sep 17 00:00:00 2001 From: rohit-yawalkar <82825674+rohit-yawalkar@users.noreply.github.com> Date: Wed, 24 Nov 2021 18:33:26 +0530 Subject: [PATCH 148/264] [Rohit|Tazeen] - Refactors and validates json reports as per fhir guidelines (#59) --- .../module/hip/web/model/FhirDischargeSummary.java | 13 +++++++++---- .../bahmni/module/hip/web/model/FhirOPConsult.java | 13 +++++++++---- .../bahmni/module/hip/web/service/Constants.java | 2 +- .../module/hip/web/service/FHIRResourceMapper.java | 14 ++++++++++++-- .../bahmni/module/hip/web/service/FHIRUtils.java | 2 +- 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java index 196b90b1..4e349843 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java @@ -22,6 +22,7 @@ import java.util.List; import java.util.Set; import java.util.UUID; +import java.util.ArrayList; import java.util.Objects; import java.util.stream.Collectors; @@ -83,14 +84,18 @@ public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeS List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDischargeSummary.getEncounter().getEncounterProviders()); List carePlans = openMrsDischargeSummary.getCarePlanObs().stream(). map(fhirResourceMapper::mapToCarePlan).collect(Collectors.toList()); - List chiefComplaints = openMrsDischargeSummary.getChiefComplaints().stream(). - map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List chiefComplaints = new ArrayList<>(); + for(int i=0;i medicationRequestsList = openMrsDischargeSummary.getDrugOrders().stream(). map(fhirResourceMapper::mapToMedicationRequest).collect(Collectors.toList()); List medications = openMrsDischargeSummary.getDrugOrders().stream().map(fhirResourceMapper::mapToMedication). filter(medication -> !Objects.isNull(medication)).collect(Collectors.toList()); - List fhirMedicalHistoryList = openMrsDischargeSummary.getMedicalHistory().stream(). - map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List fhirMedicalHistoryList = new ArrayList<>(); + for(int i=0;i physicalExaminations = openMrsDischargeSummary.getPhysicalExaminationObs().stream(). map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); List patientDocuments = openMrsDischargeSummary.getPatientDocuments().stream(). diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index 0861441f..bab58398 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -22,6 +22,7 @@ import java.util.Objects; import java.util.UUID; import java.util.Set; +import java.util.ArrayList; import java.util.stream.Collectors; public class FhirOPConsult { @@ -98,10 +99,14 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu List medications = openMrsOPConsult.getDrugOrders().stream().map(fhirResourceMapper::mapToMedication). filter(medication -> !Objects.isNull(medication)).collect(Collectors.toList()); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsOPConsult.getEncounter().getEncounterProviders()); - List fhirChiefComplaintConditionList = openMrsOPConsult.getChiefComplaintConditions().stream(). - map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); - List fhirMedicalHistoryList = openMrsOPConsult.getMedicalHistoryConditions().stream(). - map(fhirResourceMapper::mapToCondition).collect(Collectors.toList()); + List fhirChiefComplaintConditionList = new ArrayList<>(); + for(int i=0;i fhirMedicalHistoryList = new ArrayList<>(); + for(int i=0;i fhirObservationList = openMrsOPConsult.getObservations().stream(). map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); Procedure procedure = openMrsOPConsult.getProcedure() != null ? diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index f141584b..60eb56a6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -3,7 +3,7 @@ public class Constants { static final String EKA_SYSTEM = "https://projecteka.in/%s"; static final String HOSPITAL_SYSTEM = "https://%s/%s"; - static final String FHIR_SCT_SYSTEM = "https://snomed.info/sct"; + static final String FHIR_SCT_SYSTEM = "http://snomed.info/sct"; static final String EKA_ACT_SYSTEM = "https://projecteka.in/act"; static final String EKA_LOINC_SYSTEM = "https://projecteka.in/loinc"; static final String FHIR_CONDITION_CATEGORY_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-category"; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 50830e08..f0b67f7c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -8,6 +8,8 @@ import org.hl7.fhir.r4.model.Attachment; import org.hl7.fhir.r4.model.Condition; import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Coding; +import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.Observation; import org.hl7.fhir.r4.model.ServiceRequest; import org.hl7.fhir.r4.model.Procedure; @@ -16,6 +18,7 @@ import org.hl7.fhir.r4.model.MedicationRequest; import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.Medication; +import org.hl7.fhir.r4.model.Enumerations; import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; @@ -170,6 +173,7 @@ private void getGroupMembersOfObs(Obs obs, List groupMembers) { public DocumentReference mapToDocumentDocumentReference(Obs obs) { DocumentReference documentReference = new DocumentReference(); documentReference.setId(obs.getUuid()); + documentReference.setStatus(Enumerations.DocumentReferenceStatus.CURRENT); List contents = new ArrayList<>(); try { List attachments = getAttachments(obs); @@ -213,13 +217,15 @@ else if(encounterId.equals(RADIOLOGY_TYPE)) return attachments; } - public Condition mapToCondition(OpenMrsCondition openMrsCondition) { + public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patient) { Condition condition = new Condition(); CodeableConcept concept = new CodeableConcept(); concept.setText(openMrsCondition.getName()); condition.setCode(concept); + condition.setSubject(new Reference("Patient/" + patient.getId())); condition.setId(openMrsCondition.getUuid()); condition.setRecordedDate(openMrsCondition.getRecordedDate()); + condition.setClinicalStatus(new CodeableConcept(new Coding().setCode("active").setSystem("http://terminology.hl7.org/CodeSystem/condition-clinical"))); return condition; } @@ -231,6 +237,9 @@ public ServiceRequest mapToOrder(Order order){ ServiceRequest serviceRequest = new ServiceRequest(); CodeableConcept concept = new CodeableConcept(); concept.setText(order.getConcept().getDisplayString()); + serviceRequest.setIntent(ServiceRequest.ServiceRequestIntent.ORDER); + serviceRequest.setStatus(ServiceRequest.ServiceRequestStatus.ACTIVE); + serviceRequest.setSubject(new Reference("Patient/"+ order.getPatient().getUuid())); serviceRequest.setCode(concept); serviceRequest.setId(order.getUuid()); return serviceRequest; @@ -273,8 +282,9 @@ public MedicationRequest mapToMedicationRequest(DrugOrder order) { displayName(order.getDuration()) + displayName(order.getDurationUnits() == null ? "" : order.getDurationUnits().getName()); MedicationRequest medicationRequest = medicationRequestTranslator.toFhirResource(order); + medicationRequest.setSubject(new Reference("Patient/"+ order.getPatient().getUuid())); Dosage dosage = medicationRequest.getDosageInstruction().get(0); - dosage.setText(dosingInstrutions); + dosage.setText(dosingInstrutions.trim()); return medicationRequest; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 711e6e8f..8da6f27a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -95,7 +95,7 @@ public static CodeableConcept getChiefComplaintType() { Coding coding = type.addCoding(); coding.setSystem(Constants.FHIR_SCT_SYSTEM); coding.setCode("422843007"); - coding.setDisplay("Chief complaint"); + coding.setDisplay("Chief complaint section"); return type; } From cbf50ea390b4c60ef3cd633c157d0c673c16df0a Mon Sep 17 00:00:00 2001 From: swatigogia2020 Date: Thu, 3 Feb 2022 15:12:17 +0530 Subject: [PATCH 149/264] Swati| re-naming Healthid and PHR address --- api/src/main/resources/liquibase.xml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index a8aac891..560af949 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -88,4 +88,24 @@ + + + select count(*) from patient_identifier_type where name='Health ID' + + Updating Health Id Identifier type to ABHA + + update patient_identifier_type set name ='ABHA' where name= 'Health ID'; + + + + + + select count(*) from patient_identifier_type where name='PHR Address' + + Adding PHR Address Identifier type + + update patient_identifier_type set name ='ABHA Address' where name= 'PHR Address'; + + + From 34e5c66c4f61e6f7a9a18cd2a2ed1c3f54af65cb Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 14 Mar 2022 10:59:56 +0530 Subject: [PATCH 150/264] Refactor. extracted identifiers to constant and added boundry condition to deactivation --- .../module/hip/web/service/Constants.java | 3 +++ .../web/service/ExistingPatientService.java | 21 +++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 60eb56a6..be9c2edc 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -36,4 +36,7 @@ public class Constants { public static final String DOCUMENT_TYPE = "35"; public static final String RADIOLOGY_REPORT = "Radiology Report"; public static final String PATIENT_DOCUMENT = "Patient Document"; + + public static final String ABHA = "ABHA"; + public static final String ABHA_ADDRESS = "ABHA Address"; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 5cd72c9e..e9e8e463 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -19,6 +19,9 @@ import java.util.List; import java.util.Set; +import static org.bahmni.module.hip.web.service.Constants.ABHA; +import static org.bahmni.module.hip.web.service.Constants.ABHA_ADDRESS; + @Service public class ExistingPatientService { private final ExistingPatientDao existingPatientDao; @@ -28,8 +31,6 @@ public class ExistingPatientService { private final LocationService locationService; private static final String REGISTRATION_DESK = "Registration Desk"; private static final String PRIMARY_CONTACT = "primaryContact"; - private static final String HEALTH_ID = "Health ID"; - private static final String PHR_ADDRESS = "PHR Address"; static final int PHONE_NUMBER_LENGTH = 10; @Autowired @@ -51,7 +52,7 @@ public Set getMatchingPatients(String phoneNumber, String patientName, public String getHealthId(Patient patient) { String healthId = ""; try { - healthId = patient.getPatientIdentifier(HEALTH_ID).getIdentifier(); + healthId = patient.getPatientIdentifier(ABHA).getIdentifier(); } catch (NullPointerException ignored) { } @@ -60,8 +61,8 @@ public String getHealthId(Patient patient) { public void perform(String healthId, String action) { Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); - PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(PHR_ADDRESS); - PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(HEALTH_ID); + PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(ABHA_ADDRESS); + PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(ABHA); if (action.equals(Status.DELETED.toString())) { removeHealthId(patient,patientIdentifierPhr,patientIdentifierHealthId); } @@ -87,9 +88,11 @@ private void unVoidHealthId(Patient patient, String phrAddress) { Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier : patientIdentifiers) { - if (patientIdentifier.getIdentifier().equals(phrAddress) || patientIdentifier.getIdentifierType().getName().equals(HEALTH_ID)) { - patientIdentifier.setVoided(false); - patientService.savePatientIdentifier(patientIdentifier); + if (patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS) || patientIdentifier.getIdentifierType().getName().equals(ABHA)) { + if(patientIdentifier.getVoided()){ + patientIdentifier.setVoided(false); + patientService.savePatientIdentifier(patientIdentifier); + } } } } catch (NullPointerException ignored) { @@ -213,7 +216,7 @@ public boolean isHealthIdVoided(String uuid){ Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier:patientIdentifiers) { - if(patientIdentifier.getIdentifierType().getName().equals(HEALTH_ID) || patientIdentifier.getIdentifierType().getName().equals(PHR_ADDRESS)){ + if(patientIdentifier.getIdentifierType().getName().equals(ABHA) || patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)){ return patientIdentifier.getVoided(); } } From bc0ff95effb209a8a7d4a20c41239c6a03d6e7f4 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 1 Apr 2022 16:14:47 +0530 Subject: [PATCH 151/264] BAH-1439 | Add. a trigger event Co-authored-by: Kavitha S --- .github/workflows/build_and_deploy.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_deploy.yml index ea466403..11bd8c5c 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_deploy.yml @@ -8,12 +8,14 @@ on: branches: - master workflow_dispatch: +env: + ORG_NAME: BahmniIndiaDistro + EVENT_TYPE: hip-module-trigger jobs: build: - + name: build and deploy hip omod runs-on: ubuntu-latest - steps: - uses: actions/checkout@v2 - name: Set up JDK 1.8 From 34cbc861fba7cbef622b38fa238d522c0911d332 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 21 Apr 2022 16:02:16 +0530 Subject: [PATCH 152/264] BAH-1610 | Refactor. modified Care-Context name in get patient Care-Context query Co-authored-by: Kavitha S --- .../dao/impl/CareContextRepositoryImpl.java | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 3c591c7a..0ffcb4bb 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -28,13 +28,16 @@ public List getPatientCareContext(String patientUuid) { " when care_context = 'PROGRAM' then value_reference\n" + " else visit_type_id end as careContextReference,\n" + " care_context as careContextType,\n" + - " case\n" + - " when care_context = 'PROGRAM' then program_name\n" + - " else visit_type_name end as careContextName\n" + + " case when care_context = 'PROGRAM' then\n" + + " concat (program_name,\" / \",cast(visit_startDate as Date))\n" + + " else\n" + + " concat (visit_type_name,\" / \",cast(visit_startDate as Date))\n" + + " end as careContextName\n" + "from\n" + " (\n" + " select\n" + " ppa.value_reference,p3.uuid,e.patient_id, p2.program_id, vt.visit_type_id , vt.name ,\n" + + " v.date_started As visit_startDate,\n" + " pp.patient_program_id , p2.name as program_name, vt.name as visit_type_name,\n" + " case\n" + " when p2.program_id is null then 'VISIT_TYPE'\n" + @@ -62,7 +65,7 @@ public List getPatientCareContext(String patientUuid) { "where\n" + " a.uuid = :patientUuid\n" + " group by \n" + - "care_context, \n" + + "visit_startDate, \n" + "case when care_context = 'PROGRAM' \n" + "then patient_program_id else visit_type_id \n" + "end") @@ -76,7 +79,11 @@ public List getPatientCareContext(String patientUuid) { public List getNewPatientCareContext(Integer patientId) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select\n" + " care_context_type as careContextType,\n" + - " case when care_context_type = 'PROGRAM' then program_name else visit_type_name end as careContextName,\n" + + " case when care_context_type = 'PROGRAM' then\n" + + " concat (program_name,\" / \",cast(visit_startDate as Date))\n" + + " else\n" + + " concat (visit_type_name,\" / \",cast(visit_startDate as Date))\n" + + " end as careContextName,\n" + " case when care_context_type = 'PROGRAM' then value_reference else visit_type_id end as careContextReference\n" + "from\n" + " (\n" + @@ -86,6 +93,7 @@ public List getNewPatientCareContext(Integer patientId) { " e.patient_id,\n" + " p2.program_id,\n" + " vt.visit_type_id,\n" + + " v.date_started As visit_startDate,\n" + " vt.name,\n" + " pp.patient_program_id,\n" + " p2.name as program_name,\n" + @@ -113,7 +121,7 @@ public List getNewPatientCareContext(Integer patientId) { " )\n" + " ) as a\n" + "group by\n" + - " careContextName;\n").addScalar("careContextReference", IntegerType.INSTANCE) + " visit_startDate;\n").addScalar("careContextReference", IntegerType.INSTANCE) .addScalar("careContextType", StringType.INSTANCE) .addScalar("careContextName", StringType.INSTANCE); query.setParameter("patientId", patientId); From 8758353cc3f2eda1204ddfbd5884beb3a04f7582 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Fri, 22 Apr 2022 13:39:10 +0530 Subject: [PATCH 153/264] BAH-1531 | refactor. get drug orders based on visit start date in prescription order dao impl Co-authored-by: SanoferSameera --- .../module/hip/api/dao/PrescriptionOrderDao.java | 2 +- .../hip/api/dao/impl/PrescriptionOrderDaoImpl.java | 4 +++- .../org/bahmni/module/hip/web/client/ClientError.java | 3 +++ .../bahmni/module/hip/web/client/model/ErrorCode.java | 3 ++- .../hip/web/controller/PrescriptionController.java | 11 +++++++---- .../hip/web/service/OpenMRSDrugOrderClient.java | 6 ++++-- .../module/hip/web/service/PrescriptionService.java | 4 ++-- .../hip/web/service/OpenMRSDrugOrderClientTest.java | 5 +++-- 8 files changed, 25 insertions(+), 13 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java index a51a34cf..123a4427 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java @@ -8,7 +8,7 @@ import java.util.List; public interface PrescriptionOrderDao { - List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType); + List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType, Date visitStartDate); List getDrugOrdersForProgram(Patient patient, Date fromDate, Date toDate, OrderType orderType, String program, String programEnrollmentId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 6d29ed49..83cc9a37 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -14,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import java.time.LocalDate; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -30,7 +31,7 @@ public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao enco this.encounterDao = encounterDao; } - public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType) { + public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType, Date visitStartDate) { Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType, fromDate, toDate).toArray(new Integer[0]); if(encounterIds.length == 0) @@ -40,6 +41,7 @@ public List getDrugOrders(Patient patient, Date fromDate, Date toDate .createCriteria("visit", "v") .createCriteria("visitType", "vt") .add(Restrictions.eq("name", visitType)); + criteria.add(Restrictions.between("date_started", visitStartDate, LocalDate.parse(visitStartDate.toString()).plusDays(1))); criteria.add(Restrictions.eq("patient", patient)); criteria.add(Restrictions.eq("orderType", orderType)); criteria.add(Restrictions.eq("voided", false)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java index 9b7f6775..5e09bbe0 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/ClientError.java @@ -32,6 +32,9 @@ public static ClientError noPatientIdProvided() { public static ClientError noVisitTypeProvided(){ return new ClientError(ErrorCode.NO_VISIT_TYPE_SUPPLIED.getValue(),"No Visit type is supplied"); } + public static ClientError noVisitStartDateProvided(){ + return new ClientError(ErrorCode.NO_VISIT_START_DATE_SUPPLIED.getValue(),"No Visit start date is supplied"); + } public static ClientError invalidVisitType(){ return new ClientError(ErrorCode.INVALID_VISIT_TYPE.getValue(),"Visit Type is invalid"); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java index 3e0cf2d9..a218a97e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/client/model/ErrorCode.java @@ -15,7 +15,8 @@ public enum ErrorCode { NO_PROGRAM_NAME_SUPPLIED (1506), NO_PROGRAM_ID_SUPPLIED(1507), INVALID_PROGRAM_NAME(1508), - PATIENT_IDENTIFIER_NOT_FOUND(1509); + PATIENT_IDENTIFIER_NOT_FOUND(1509), + NO_VISIT_START_DATE_SUPPLIED(1510); private final int value; ErrorCode(int val) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 69d28ac9..a928a485 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -35,22 +35,25 @@ public PrescriptionController(PrescriptionService prescriptionService, Validatio @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get( + ResponseEntity getPrescriptionForVisit( @RequestParam String patientId, @RequestParam String fromDate, @RequestParam String toDate, - @RequestParam String visitType + @RequestParam String visitType, + @RequestParam String visitStartDate ) throws ParseException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (visitStartDate == null || visitStartDate.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); if (!validationService.isValidVisit(visitType)) return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List prescriptionBundle = - prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, visitStartDate); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledPrescriptionResponse(prescriptionBundle)); @@ -58,7 +61,7 @@ ResponseEntity get( @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get( + ResponseEntity getPrescriptionForProgram( @RequestParam String patientId, @RequestParam String fromDate, @RequestParam String toDate, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 69f1b090..284a814a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -14,6 +14,8 @@ import java.util.List; import java.util.stream.Collectors; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; + @Service class OpenMRSDrugOrderClient { @@ -47,11 +49,11 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType) { + List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType, String visitStartDate) { Patient patient = patientService.getPatientByUuid(forPatientUUID); OrderType drugOrderType = orderService.getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); return prescriptionOrderDao - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType, parseDate(visitStartDate)); } List getDrugOrdersByDateAndProgramFor(String forPatientUUID, DateRange dateRange, String programName, String programEnrolmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 9e2237a8..8c06e038 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -27,8 +27,8 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType) { - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, dateRange, visitType)); + public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType, String visitStartDate) { + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, dateRange, visitType, visitStartDate)); if (drugOrders.isEmpty()) return new ArrayList<>(); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index e8ff348b..14f1551d 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -111,6 +111,7 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { DateRange dateRange = new DateRange(new Date(), new Date()); String patientUUID = "0f90531a-285c-438b-b265-bb3abb4745bd"; String visitType = "IPD"; + Date visitStartDate = new Date(); Patient patient = mock(Patient.class); OrderType orderType = mock(OrderType.class); @@ -119,9 +120,9 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { .thenReturn(patient); when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); - openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType); + openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType, visitStartDate.toString()); verify(prescriptionOrderDao, times(1)) - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType, visitType); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType, visitType, visitStartDate); } } From b5425fbd04a937da87f8ce952ffa552a3f3e64ac Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 22 Apr 2022 13:53:57 +0530 Subject: [PATCH 154/264] BAH-1531 | Refactor. prescription controller test with vistStartDate --- .../module/hip/web/controller/PrescriptionController.java | 2 +- .../module/hip/web/service/OpenMRSDrugOrderClient.java | 5 +++-- .../bahmni/module/hip/web/service/PrescriptionService.java | 3 ++- .../hip/web/controller/PrescriptionControllerTest.java | 6 +++--- .../module/hip/web/service/OpenMRSDrugOrderClientTest.java | 2 +- 5 files changed, 10 insertions(+), 8 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index a928a485..b1c6833f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -53,7 +53,7 @@ ResponseEntity getPrescriptionForVisit( if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List prescriptionBundle = - prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, visitStartDate); + prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDate(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledPrescriptionResponse(prescriptionBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 284a814a..40d6b366 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -49,11 +50,11 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType, String visitStartDate) { + List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(forPatientUUID); OrderType drugOrderType = orderService.getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); return prescriptionOrderDao - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType, parseDate(visitStartDate)); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType, visitStartDate); } List getDrugOrdersByDateAndProgramFor(String forPatientUUID, DateRange dateRange, String programName, String programEnrolmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 8c06e038..bbf7d69c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -27,7 +28,7 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType, String visitStartDate) { + public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType, Date visitStartDate) { DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, dateRange, visitType, visitStartDate)); if (drugOrders.isEmpty()) diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java index 39bfc11f..de23f6a0 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java @@ -51,7 +51,7 @@ public void setup() { public void shouldReturn200OForValidVisit() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString())) + when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") @@ -65,7 +65,7 @@ public void shouldReturn200OForValidVisit() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString())) + when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "OP") @@ -80,7 +80,7 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString())) + when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index 14f1551d..d27ad01a 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -120,7 +120,7 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { .thenReturn(patient); when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); - openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType, visitStartDate.toString()); + openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType, visitStartDate); verify(prescriptionOrderDao, times(1)) .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType, visitType, visitStartDate); From 9f0a18d7a1dfa09d1525a91507456f6d1c5874c6 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Apr 2022 16:27:41 +0530 Subject: [PATCH 155/264] BAH-1610 | Refactor. care-context name to be visit type and visit start DateTime Co-authored-by: Kavitha S --- .../hip/api/dao/impl/CareContextRepositoryImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 0ffcb4bb..b044f208 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -29,9 +29,9 @@ public List getPatientCareContext(String patientUuid) { " else visit_type_id end as careContextReference,\n" + " care_context as careContextType,\n" + " case when care_context = 'PROGRAM' then\n" + - " concat (program_name,\" / \",cast(visit_startDate as Date))\n" + + " concat (program_name,\" / \",visit_startDate)\n" + " else\n" + - " concat (visit_type_name,\" / \",cast(visit_startDate as Date))\n" + + " concat (visit_type_name,\" / \",visit_startDate)\n" + " end as careContextName\n" + "from\n" + " (\n" + @@ -80,9 +80,9 @@ public List getNewPatientCareContext(Integer patientId) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select\n" + " care_context_type as careContextType,\n" + " case when care_context_type = 'PROGRAM' then\n" + - " concat (program_name,\" / \",cast(visit_startDate as Date))\n" + + " concat (program_name,\" / \",visit_startDate)\n" + " else\n" + - " concat (visit_type_name,\" / \",cast(visit_startDate as Date))\n" + + " concat (visit_type_name,\" / \",visit_startDate)\n" + " end as careContextName,\n" + " case when care_context_type = 'PROGRAM' then value_reference else visit_type_id end as careContextReference\n" + "from\n" + From 877871ad942038c44ecb230c211396af73162722 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Apr 2022 16:38:01 +0530 Subject: [PATCH 156/264] BAH-1531 | Refactor. to get drug orders based on visit start DateTime using openmrs service instead of hibernate query Co-authored-by: Kavitha S --- .../hip/api/dao/PrescriptionOrderDao.java | 2 +- .../dao/impl/PrescriptionOrderDaoImpl.java | 37 +++++++++++-------- .../controller/PrescriptionController.java | 3 +- .../web/service/OpenMRSDrugOrderClient.java | 4 +- .../module/hip/web/utils/DateUtils.java | 5 +++ .../PrescriptionControllerTest.java | 3 ++ .../service/OpenMRSDrugOrderClientTest.java | 2 +- 7 files changed, 35 insertions(+), 21 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java index 123a4427..82348449 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java @@ -8,7 +8,7 @@ import java.util.List; public interface PrescriptionOrderDao { - List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType, Date visitStartDate); + List getDrugOrders(Patient patient, Date fromDate, Date toDate, String visitType, Date visitStartDate); List getDrugOrdersForProgram(Patient patient, Date fromDate, Date toDate, OrderType orderType, String program, String programEnrollmentId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 83cc9a37..461e3d82 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -11,43 +11,50 @@ import org.openmrs.Order; import org.openmrs.OrderType; import org.openmrs.Patient; +import org.openmrs.api.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.time.LocalDate; import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Repository public class PrescriptionOrderDaoImpl implements PrescriptionOrderDao { protected static final Log log = LogFactory.getLog(PrescriptionOrderDaoImpl.class); private SessionFactory sessionFactory; private EncounterDao encounterDao; + private final OrderService orderService; @Autowired - public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao encounterDao) { + public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao encounterDao, OrderService orderService) { this.sessionFactory = sessionFactory; this.encounterDao = encounterDao; + this.orderService = orderService; } - public List getDrugOrders(Patient patient, Date fromDate, Date toDate, OrderType orderType, String visitType, Date visitStartDate) { + public List getDrugOrders(Patient patient, Date fromDate, Date toDate, String visitType, Date visitStartDate) { Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType, fromDate, toDate).toArray(new Integer[0]); if(encounterIds.length == 0) return new ArrayList< DrugOrder > (); - Criteria criteria = this.sessionFactory.getCurrentSession().createCriteria(Order.class); - criteria.createCriteria("encounter", "e") - .createCriteria("visit", "v") - .createCriteria("visitType", "vt") - .add(Restrictions.eq("name", visitType)); - criteria.add(Restrictions.between("date_started", visitStartDate, LocalDate.parse(visitStartDate.toString()).plusDays(1))); - criteria.add(Restrictions.eq("patient", patient)); - criteria.add(Restrictions.eq("orderType", orderType)); - criteria.add(Restrictions.eq("voided", false)); - criteria.add(Restrictions.in( "e.encounterId", encounterIds)); - criteria.add(Restrictions.between("dateCreated", fromDate, toDate)); - return criteria.list(); + + List orders = orderService.getAllOrdersByPatient(patient) + .stream() + .filter(order -> order.getEncounter().getVisit().getDateCreated().after(fromDate) + && order.getEncounter().getVisit().getDateCreated().before(toDate)) + .collect(Collectors.toList());; + List orderLists = orders.stream() + .filter(order -> Arrays.asList(encounterIds).contains(order.getEncounter().getId()) + && order.getEncounter().getVisit().getVisitType().getName().equals(visitType) + && order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID) + && order.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) + .map(order -> (DrugOrder) order) + .collect(Collectors.toList()); + + return orderLists; } public List getDrugOrdersForProgram(Patient patient, Date fromDate, Date toDate, OrderType orderType, String program, String programEnrollmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index b1c6833f..7ba7b178 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -20,6 +20,7 @@ import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/prescriptions") @RestController @@ -53,7 +54,7 @@ ResponseEntity getPrescriptionForVisit( if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List prescriptionBundle = - prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDate(visitStartDate)); + prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledPrescriptionResponse(prescriptionBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 40d6b366..93074276 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.stream.Collectors; -import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; @Service class OpenMRSDrugOrderClient { @@ -52,9 +51,8 @@ private boolean matchesVisitType(String visitType, Order order) { List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(forPatientUUID); - OrderType drugOrderType = orderService.getOrderTypeByUuid(OrderType.DRUG_ORDER_TYPE_UUID); return prescriptionOrderDao - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), drugOrderType, visitType, visitStartDate); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), visitType, visitStartDate); } List getDrugOrdersByDateAndProgramFor(String forPatientUUID, DateRange dateRange, String programName, String programEnrolmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java index bd34af1c..268f0fac 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java @@ -9,4 +9,9 @@ public static Date parseDate(String date) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); return dateFormat.parse(date); } + + public static Date parseDateTime(String date) throws ParseException { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return dateFormat.parse(date); + } } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java index de23f6a0..5756fc29 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java @@ -55,6 +55,7 @@ public void shouldReturn200OForValidVisit() throws Exception { .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01 12:00:00") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -69,6 +70,7 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "OP") + .param("visitStartDate", "2020-01-01") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -84,6 +86,7 @@ public void shouldReturn400OnInvalidPatientId() throws Exception { .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index d27ad01a..ad884c0f 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -123,6 +123,6 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType, visitStartDate); verify(prescriptionOrderDao, times(1)) - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), orderType, visitType, visitStartDate); + .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), visitType, visitStartDate); } } From dc4a75be1368c343d8a5bfd38492ed8d5ec93d22 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 11:17:49 +0530 Subject: [PATCH 157/264] BAH-1533 | Refactor. queries to fetch opConsult data based on visit start DateTime Co-authored-by: Kavitha S --- .../module/hip/api/dao/ConsultationDao.java | 6 +-- .../module/hip/api/dao/EncounterDao.java | 4 +- .../module/hip/api/dao/OPConsultDao.java | 6 +-- .../hip/api/dao/impl/ConsultationDaoImpl.java | 53 +++++++++++-------- .../hip/api/dao/impl/EncounterDaoImpl.java | 10 ++-- .../hip/api/dao/impl/OPConsultDaoImpl.java | 29 ++++++---- .../web/controller/OPConsultController.java | 10 ++-- .../hip/web/service/ConsultationService.java | 22 ++++---- .../hip/web/service/OPConsultService.java | 20 +++---- .../controller/OPConsultControllerTest.java | 9 ++-- 10 files changed, 98 insertions(+), 71 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java index 71effc8c..74bc747c 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java @@ -7,10 +7,10 @@ import java.util.List; public interface ConsultationDao { - List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate); + List getChiefComplaints(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); List getChiefComplaintForProgram(String programName, Date fromDate, Date toDate, Patient patient); - List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate); - List getOrders(Patient patient, String visit, Date fromDate, Date toDate); + List getPhysicalExamination(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getOrders(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java index 82eed5b0..cbf5b764 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java @@ -5,8 +5,8 @@ public interface EncounterDao { - List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date fromDate, Date toDate) ; + List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForPrescriptions(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForDiagnosticReport(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); - List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date fromDate, Date toDate) ; + List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit,Date visitStartDate, Date fromDate, Date toDate) ; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index 419257a2..d6f9b65e 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -10,9 +10,9 @@ import java.util.Map; public interface OPConsultDao { - Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate); - List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate); - List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 3b4dab28..955fe1d3 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -48,13 +48,12 @@ public ConsultationDaoImpl(ObsService obsService, OrderService orderService, Pro } @Override - public List getChiefComplaints(Patient patient, String visit, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient); + public List getChiefComplaints(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + List patientObs = getAllObsBetweenDates(patient, fromDate, toDate); List chiefComplaintObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) + for (Obs o : patientObs) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) && o.getValueCoded() != null @@ -82,6 +81,15 @@ public List getChiefComplaintForProgram(String programName, Date fromDate, return obsSet; } + public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient) + .stream() + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) + && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) + .collect(Collectors.toList()); + return patientObs; + } + public List getAllObs(String programName, Date fromDate, Date toDate, Patient patient) { List patientPrograms = programWorkflowService.getPatientPrograms(patient, programWorkflowService.getProgramByName(programName), fromDate, toDate, null, null, false); Set patientProgramSet = new HashSet<>(patientPrograms); @@ -97,22 +105,20 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie } @Override - public List getPhysicalExamination(Patient patient, String visit, Date fromDate, Date toDate) { - final String[] formNames = new String[]{"Discharge Summary","Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", + public List getPhysicalExamination(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; - List patientObs = obsService.getObservationsByPerson(patient); + List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); List physicalExaminationObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) + for (Obs o : patientObs) { + if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && o.getValueCoded() == null && o.getConcept().getName().getLocalePreferred() && o.getObsGroup() == null && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) - ) - { + ) { physicalExaminationObsMap.add(o); } } @@ -120,14 +126,17 @@ public List getPhysicalExamination(Patient patient, String visit, Date from } @Override - public List getOrders(Patient patient, String visit, Date fromDate, Date toDate) { - List orders = orderService.getAllOrdersByPatient(patient); + public List getOrders(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + List orders = orderService.getAllOrdersByPatient(patient) + .stream() + .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate) + && order.getEncounter().getVisit().getStartDatetime().before(toDate)) + .collect(Collectors.toList()); return orders.stream().filter(order -> matchesVisitType(visit, order)) - .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate)) - .filter(order -> order.getEncounter().getVisit().getStartDatetime().before(toDate)) - .filter(order -> order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION)) - .filter(order -> ORDER_TYPES.contains(order.getOrderType().getName())) - .collect(Collectors.toList()); + .filter(order -> order.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) + .filter(order -> order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION)) + .filter(order -> ORDER_TYPES.contains(order.getOrderType().getName())) + .collect(Collectors.toList()); } private boolean matchesVisitType(String visitType, Order order) { diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index aadc64d7..d295ca4f 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -32,6 +32,7 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { "\te.visit_id = v.visit_id\n" + "where\n" + "\tvt.name = :visit\n" + + "\tand v.date_started = :visitStartDate\n" + "\tand e.encounter_id not in (\n" + "\tselect\n" + "\t\tencounter_id\n" + @@ -93,6 +94,7 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " et.name ='" + RADIOLOGY_TYPE + "' or et.name = '" + PATIENT_DOCUMENT_TYPE + "'\n" + " )\n" + " and vt.name = :visit\n" + + " and v.date_started = :visitStartDate\n" + " and cn.name = '" + DOCUMENT_TYPE + "'\n" + " and o.void_reason is null\n" + " and e.encounter_id not in (\n" + @@ -178,14 +180,14 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " and :toDate ;\n"; @Override - public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date fromDate, Date toDate) { + public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForPrescriptions); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); query.setParameter("fromDate", fromDate); query.setParameter("toDate", toDate); - + query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); } @@ -215,14 +217,14 @@ public List GetEncounterIdsForProgramForDiagnosticReport(String patient } @Override - public List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date fromDate, Date toDate) { + public List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForDiagnosticReports); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); query.setParameter("fromDate", fromDate); query.setParameter("toDate", toDate); - + query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 8b3e051a..bc90aa19 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -47,7 +47,7 @@ public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService } @Override - public Map> getMedicalHistoryConditions(Patient patient, String visit, Date fromDate, Date toDate) { + public Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; List encounters = encounterService.getEncountersByPatient(patient) @@ -55,6 +55,7 @@ public Map> getMedicalHistoryConditions(Patient patie .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation") && encounter.getDateCreated().after(fromDate) && encounter.getDateCreated().before(toDate) && + encounter.getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(encounter.getVisit().getVisitType().getName(), visit)) .collect(Collectors.toList()); List conditions = conditionService.getActiveConditions(patient) @@ -68,7 +69,8 @@ public Map> getMedicalHistoryConditions(Patient patie for(Condition condition : conditions){ for(Encounter encounter : encounters){ Encounter nextEncounter; - Date nextEncounterDate = new Date(); + Encounter encounterForNxtVisit = encounterService.getEncounter(encounter.getId() + 1); + Date nextEncounterDate = encounterForNxtVisit != null ? encounterForNxtVisit.getDateCreated() : new Date(); if(encounters.indexOf(encounter) < (encounters.size() - 1)){ nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); nextEncounterDate = nextEncounter.getDateCreated(); @@ -87,14 +89,22 @@ public Map> getMedicalHistoryConditions(Patient patie return encounterConditionsMap; } + public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient) + .stream() + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) + && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) + .collect(Collectors.toList()); + return patientObs; + } + @Override - public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient); + public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); List medicalHistoryDiagnosisObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && Objects.equals(o.getConcept().getName().getName(), CODED_DIAGNOSIS) ) @@ -106,13 +116,12 @@ public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date } @Override - public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient); + public List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); List proceduresObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) && !o.getVoided() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java index d923b17f..58be9b50 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -20,6 +20,7 @@ import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/opConsults") @RestController @@ -35,20 +36,23 @@ public OPConsultController(OPConsultService opConsultService, ValidationService @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get(@RequestParam String patientId, + ResponseEntity getOpconsultForVisit(@RequestParam String patientId, @RequestParam String visitType, + @RequestParam String visitStartDate, @RequestParam String fromDate, @RequestParam String toDate) throws ParseException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (visitStartDate == null || visitStartDate.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); if (!validationService.isValidVisit(visitType)) return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List opConsultBundle = - opConsultService.getOpConsultsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + opConsultService.getOpConsultsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType,parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) @@ -57,7 +61,7 @@ ResponseEntity get(@RequestParam String patientId, @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get( + ResponseEntity getOpConsultForProgram( @RequestParam String patientId, @RequestParam String fromDate, @RequestParam String toDate, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 0366b4c0..0ef48074 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -40,8 +40,8 @@ public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsu this.diagnosticReportService = diagnosticReportService; } - public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, fromDate, toDate); + public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { + List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, visitStartDate, fromDate, toDate); return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } @@ -50,8 +50,8 @@ public ConcurrentHashMap> getEncounterChiefCom return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } - public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, fromDate, toDate); + public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { + List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, visitStartDate, fromDate, toDate); return getEncounterListMapForPhysicalExamination(physicalExaminations); } @@ -60,9 +60,9 @@ public Map> getEncounterPhysicalExaminationMapForProgram(St return getEncounterListMapForPhysicalExamination(physicalExaminations); } - public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date fromDate, Date toDate) { - Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, fromDate, toDate); - List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, fromDate, toDate); + public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, visitStartDate, fromDate, toDate); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, visitStartDate, fromDate, toDate); return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } @@ -72,9 +72,9 @@ public Map> getEncounterMedicalHistoryConditio return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } - public Map> getEncounterPatientDocumentsMap(String visitType, Date fromDate, Date toDate, Patient patient) { + public Map> getEncounterPatientDocumentsMap(String visitType, Date visitStartDate, Date fromDate, Date toDate, Patient patient) { final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType); + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType, visitStartDate); return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } @@ -84,8 +84,8 @@ public Map> getEncounterPatientDocumentsMapForProgram(Strin return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } - public Map> getEncounterOrdersMap(String visitType, Date fromDate, Date toDate, Patient patient) { - List orders = consultationDao.getOrders(patient, visitType, fromDate, toDate); + public Map> getEncounterOrdersMap(String visitType, Date visitStartDate, Date fromDate, Date toDate, Patient patient) { + List orders = consultationDao.getOrders(patient, visitType, visitStartDate, fromDate, toDate); return getEncounterListMapForOrders(orders); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index 21f09a05..31e14511 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -40,19 +40,19 @@ public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, this.consultationService = consultationService; } - public List getOpConsultsForVisit(String patientUuid, DateRange dateRange, String visitType) { + public List getOpConsultsForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { Date fromDate = dateRange.getFrom(); Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); - Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); + Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType, visitStartDate)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, fromDate, toDate, patient); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, fromDate, toDate, patient); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, fromDate, toDate, patient); List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, @@ -84,8 +84,8 @@ public List getOpConsultsForProgram(String patientUuid, DateRan map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List obsProcedures = opConsultDao.getProcedures(patient, visitType, fromDate, toDate); + private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { + List obsProcedures = opConsultDao.getProcedures(patient, visitType,visitStartDate,fromDate, toDate); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java index 3ead53b4..182afc59 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java @@ -51,11 +51,12 @@ public void setup() { public void shouldReturn200ForVisits() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -67,11 +68,12 @@ public void shouldReturn200ForVisits() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) .param("visitType", "OP") + .param("visitStartDate", "2020-01-01") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -83,11 +85,12 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString())) + when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") From ea857f164bb14d9d7ecb35a33df8ee49e51f1e7f Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 12:27:28 +0530 Subject: [PATCH 158/264] BAH-1534 | Refactor. queries to fetch discharge summary based on visit start DateTime Co-authored-by: Kavitha S --- .../hip/api/dao/DischargeSummaryDao.java | 4 +-- .../api/dao/impl/DischargeSummaryDaoImpl.java | 24 ++++++++++------- .../DischargeSummaryController.java | 10 ++++--- .../web/service/DischargeSummaryService.java | 26 +++++++++---------- 4 files changed, 37 insertions(+), 27 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java index 43191de4..73a4ed5f 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java @@ -6,8 +6,8 @@ import java.util.List; public interface DischargeSummaryDao { - List getCarePlan(Patient patient, String visit, Date fromDate, Date toDate); - List getProcedures(Patient patient, String visit, Date fromDate, Date toDate); + List getCarePlan(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index 1280a2d7..f7a691e5 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -41,13 +41,11 @@ private boolean matchesVisitType(String visitType, Obs obs) { } @Override - public List getCarePlan(Patient patient, String visit, Date fromDate, Date toDate) { + public List getCarePlan(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { final String obsName = "Discharge Summary"; - List patientObs = obsService.getObservationsByPerson(patient); - + List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); List carePlanObs = patientObs.stream().filter(obs -> matchesVisitType(visit, obs)) - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate)) - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().before(toDate)) + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) .filter(obs -> obsName.equals(obs.getConcept().getName().getName())) .filter(obs -> obs.getConcept().getName().getLocalePreferred()) .collect(Collectors.toList()); @@ -77,13 +75,12 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t } @Override - public List getProcedures(Patient patient, String visit, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient); + public List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); List proceduresObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().after(fromDate) - && o.getEncounter().getVisit().getStartDatetime().before(toDate) + && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) && o.getObsGroup() == null && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) @@ -116,4 +113,13 @@ public List getProceduresForProgram(String programName, Date fromDate, Date } return proceduresObsSet; } + + public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { + List patientObs = obsService.getObservationsByPerson(patient) + .stream() + .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) + && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) + .collect(Collectors.toList()); + return patientObs; + } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java index 77efcec3..65ba3737 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -24,6 +24,7 @@ import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/dischargeSummary") @RestController @@ -40,8 +41,9 @@ public DischargeSummaryController(ValidationService validationService, Discharge @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get(@RequestParam String patientId, + ResponseEntity getDischargeSummaryForVisit(@RequestParam String patientId, @RequestParam String visitType, + @RequestParam String visitStartDate, @RequestParam String fromDate, @RequestParam String toDate) throws ParseException { @@ -49,12 +51,14 @@ ResponseEntity get(@RequestParam String patientId, return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (visitStartDate == null || visitStartDate.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); if (!validationService.isValidVisit(visitType)) return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); - List dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + List dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) @@ -63,7 +67,7 @@ ResponseEntity get(@RequestParam String patientId, @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get( + ResponseEntity getDischargeSummaryForProgram( @RequestParam String patientId, @RequestParam String fromDate, @RequestParam String toDate, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index 0c6672d6..e4b927ae 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -40,19 +40,19 @@ public DischargeSummaryService(PatientService patientService, DischargeSummaryDa this.consultationService = consultationService; } - public List getDischargeSummaryForVisit(String patientUuid, DateRange dateRange, String visitType) { + public List getDischargeSummaryForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { Date fromDate = dateRange.getFrom(); Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); - Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, fromDate, toDate); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType)); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate, fromDate, toDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType,visitStartDate)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, fromDate, toDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, fromDate, toDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, fromDate, toDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, fromDate, toDate, patient); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, fromDate, toDate); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, fromDate, toDate, patient); + ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, fromDate, toDate, patient); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate, fromDate, toDate); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, fromDate, toDate, patient); List openMrsDischargeSummaryList = OpenMrsDischargeSummary.getOpenMrsDischargeSummaryList(encounterDischargeSummaryMap, encounteredDrugOrdersMap, encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounterPatientDocumentsMap, encounterProcedureMap, encounterOrdersMap, patient); return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); @@ -76,8 +76,8 @@ public List getDischargeSummaryForProgram(String patient } - private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType, fromDate, toDate); + private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { + List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType,visitStartDate, fromDate, toDate); return getEncounterListMapForCarePlan(carePlanObs); } @@ -98,8 +98,8 @@ private Map> getEncounterCarePlanMapForProgram(String progr return getEncounterListMapForCarePlan(carePlanObs); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date fromDate, Date toDate) { - List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, fromDate, toDate); + private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { + List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, visitStartDate, fromDate, toDate); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); From 7d0f5fb5c63f1ff830feb6ad75003ba4a9b49361 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 12:34:49 +0530 Subject: [PATCH 159/264] BAH-1532 | Refactor. queries to fetch diagnostic report based on visit start DateTime Co-authored-by: Kavitha S --- .../org/bahmni/module/hip/api/dao/HipVisitDao.java | 2 +- .../module/hip/api/dao/impl/HipVisitDaoImpl.java | 4 +++- .../web/controller/DiagnosticReportController.java | 12 ++++++++---- .../hip/web/service/DiagnosticReportService.java | 12 ++++++------ .../controller/DiagnosticReportControllerTest.java | 9 ++++++--- 5 files changed, 24 insertions(+), 15 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java index 56bc94b8..3b8edd3c 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java @@ -6,6 +6,6 @@ public interface HipVisitDao { List GetVisitIdsForProgramForLabResults(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); - List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date fromDate, Date toDate) ; + List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) ; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java index d6488375..baf945fe 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java @@ -25,6 +25,7 @@ public HipVisitDaoImpl(SessionFactory sessionFactory) { "join encounter e on e.visit_id = v.visit_id\n" + "where \n" + " vt.name = :visit \n" + + " and v.date_started = :visitStartDate \n" + " and v.date_started between :fromDate and :toDate and\n" + "e.visit_id not in (select e1.visit_id from encounter as e1 inner join episode_encounter on episode_encounter.encounter_id = e1.encounter_id) \n" + "and v.patient_id in (select person_id from person as p2 where p2.uuid = :patientUUID) ;" ; @@ -53,13 +54,14 @@ public List GetVisitIdsForProgramForLabResults(String patientUUID, Stri } @Override - public List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date fromDate, Date toDate) { + public List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetVisitIdsForVisitForLabResults); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); query.setParameter("fromDate", fromDate); query.setParameter("toDate", toDate); + query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java index 3b3ab377..b8629286 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java @@ -24,6 +24,7 @@ import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; +import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @RequestMapping(value = "/rest/" + RestConstants.VERSION_1 + "/hip/diagnosticReports") @RestController @@ -39,22 +40,25 @@ public DiagnosticReportController(DiagnosticReportService diagnosticReportServic @RequestMapping(method = RequestMethod.GET, value = "/visit", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get(@RequestParam String patientId, + ResponseEntity getDiagnosticReportsForVisit(@RequestParam String patientId, @RequestParam String visitType, + @RequestParam String visitStartDate, @RequestParam String fromDate, @RequestParam String toDate) throws ParseException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); + if (visitStartDate == null || visitStartDate.isEmpty()) + return ResponseEntity.badRequest().body(ClientError.noVisitTypeProvided()); if (!validationService.isValidVisit(visitType)) return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List diagnosticReportBundle = - diagnosticReportService.getDiagnosticReportsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType); + diagnosticReportService.getDiagnosticReportsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType,parseDateTime(visitStartDate)); - diagnosticReportBundle.addAll( diagnosticReportService.getLabResultsForVisits(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType )); + diagnosticReportBundle.addAll( diagnosticReportService.getLabResultsForVisits(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType ,parseDateTime(visitStartDate))); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) @@ -63,7 +67,7 @@ ResponseEntity get(@RequestParam String patientId, @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) public @ResponseBody - ResponseEntity get( + ResponseEntity getDiagnosticReportsForProgram( @RequestParam String patientId, @RequestParam String fromDate, @RequestParam String toDate, diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 3f225b45..659dc8b8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -62,11 +62,11 @@ public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDia } - public List getDiagnosticReportsForVisit(String patientUuid, DateRange dateRange, String visitType) { + public List getDiagnosticReportsForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { Date fromDate = dateRange.getFrom(); Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); - HashMap> encounterListMap = getAllObservationsForVisits(fromDate, toDate, patient, visitType); + HashMap> encounterListMap = getAllObservationsForVisits(fromDate, toDate, patient, visitType,visitStartDate); List openMrsDiagnosticReports = OpenMrsDiagnosticReport.fromDiagnosticReport(encounterListMap); return openMrsDiagnosticReports @@ -77,9 +77,9 @@ public List getDiagnosticReportsForVisit(String patientU public HashMap> getAllObservationsForVisits(Date fromDate, Date toDate, Patient patient, - String visitType) { + String visitType, Date visitStartDate) { HashMap> encounterListMap = new HashMap<>(); - List encounterIds = encounterDao.GetEncounterIdsForVisitForDiagnosticReport(patient.getUuid(), visitType, fromDate, toDate); + List encounterIds = encounterDao.GetEncounterIdsForVisitForDiagnosticReport(patient.getUuid(), visitType, visitStartDate, fromDate, toDate); List finalList = new ArrayList<>(); for(Integer encounterId : encounterIds){ finalList.add(encounterService.getEncounter(encounterId)); @@ -148,9 +148,9 @@ private List getLabResults(String patientUuid, DateRange List bundles = labResults.stream().map(fhirBundledDiagnosticReportBuilder::fhirBundleResponseFor).collect(Collectors.toList()); return bundles; } - public List getLabResultsForVisits(String patientUuid, DateRange dateRange, String visittype) + public List getLabResultsForVisits(String patientUuid, DateRange dateRange, String visittype, Date visitStartDate) { - List visitsForVisitType = hipVisitDao.GetVisitIdsForVisitForLabResults(patientUuid, visittype, dateRange.getFrom(), dateRange.getTo() ); + List visitsForVisitType = hipVisitDao.GetVisitIdsForVisitForLabResults(patientUuid, visittype,visitStartDate, dateRange.getFrom(), dateRange.getTo() ); return getLabResults(patientUuid, dateRange, visitsForVisitType); } diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java index 0bf9fab1..4cda2549 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java @@ -51,11 +51,12 @@ public void setup() { public void shouldReturn200ForVisits() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01 12:00:00") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -67,11 +68,12 @@ public void shouldReturn200ForVisits() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) .param("visitType", "OP") + .param("visitStartDate", "2020-01-01 12:00:00") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") @@ -83,11 +85,12 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") + .param("visitStartDate", "2020-01-01 12:00:00") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") From 6f7cbd16ea0d62a51a5b236dbc7bdd67bcddfeea Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 12:39:01 +0530 Subject: [PATCH 160/264] BAH-1533 | Fixed. opConsultController Test failure Co-authored-by: Kavitha S --- .../module/hip/web/controller/OPConsultControllerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java index 182afc59..148d516c 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java @@ -56,7 +56,7 @@ public void shouldReturn200ForVisits() throws Exception { mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") - .param("visitStartDate", "2020-01-01") + .param("visitStartDate", "2020-01-01 12:00:00") .param("patientId", "0f90531a-285c-438b-b265-bb3abb4745bd") .param("fromDate", "2020-01-01") .param("toDate", "2020-01-31") From 8f5f08c2e5e0e2fb52c4c92e6e4a868342020748 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 15:43:17 +0530 Subject: [PATCH 161/264] BAH-1531 | Refactor. prescription query to use encounterdao to get encounter Ids based on visit start DateTime Co-authored-by: Kavitha S --- .../module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 461e3d82..f7719643 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -37,7 +37,7 @@ public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao enco public List getDrugOrders(Patient patient, Date fromDate, Date toDate, String visitType, Date visitStartDate) { - Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType, fromDate, toDate).toArray(new Integer[0]); + Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType,visitStartDate, fromDate, toDate).toArray(new Integer[0]); if(encounterIds.length == 0) return new ArrayList< DrugOrder > (); @@ -45,12 +45,12 @@ public List getDrugOrders(Patient patient, Date fromDate, Date toDate .stream() .filter(order -> order.getEncounter().getVisit().getDateCreated().after(fromDate) && order.getEncounter().getVisit().getDateCreated().before(toDate)) - .collect(Collectors.toList());; + .collect(Collectors.toList()); + List orderLists = orders.stream() .filter(order -> Arrays.asList(encounterIds).contains(order.getEncounter().getId()) && order.getEncounter().getVisit().getVisitType().getName().equals(visitType) - && order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID) - && order.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) + && order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) .map(order -> (DrugOrder) order) .collect(Collectors.toList()); From 09914d08fa71a6331a0f48ad9010683a5065d1a1 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 15:47:23 +0530 Subject: [PATCH 162/264] Fixed cast failure in converting order to Drugorder while fetching dispensed prescription Co-authored-by: Kavitha S --- .../module/hip/web/service/DischargeSummaryService.java | 2 +- .../org/bahmni/module/hip/web/service/OPConsultService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index e4b927ae..f9609e93 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -44,9 +44,9 @@ public List getDischargeSummaryForVisit(String patientUu Date fromDate = dateRange.getFrom(); Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); - Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate, fromDate, toDate); DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType,visitStartDate)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate, fromDate, toDate); ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index 31e14511..2332b961 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -45,11 +45,11 @@ public List getOpConsultsForVisit(String patientUuid, DateRange Date toDate = dateRange.getTo(); Patient patient = patientService.getPatientByUuid(patientUuid); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType, visitStartDate)); + Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType, visitStartDate)); - Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate, fromDate, toDate); Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, fromDate, toDate, patient); Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, fromDate, toDate, patient); From d7593fed5ba305ba4b6b9d5e5e172be9fd55cb58 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Apr 2022 15:51:06 +0530 Subject: [PATCH 163/264] Refactor. dischrage summary bundle to place conditions and diagnosis under Medical History Co-authored-by: Kavitha S --- .../org/bahmni/module/hip/web/model/FhirDischargeSummary.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java index 4e349843..49f5e72b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java @@ -94,7 +94,7 @@ public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeS filter(medication -> !Objects.isNull(medication)).collect(Collectors.toList()); List fhirMedicalHistoryList = new ArrayList<>(); for(int i=0;i physicalExaminations = openMrsDischargeSummary.getPhysicalExaminationObs().stream(). map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); From e2da7708e48a1cf8bb490f752bfaa4c2000f5061 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 29 Apr 2022 12:43:29 +0530 Subject: [PATCH 164/264] Refactor. care-context reference as provider name Co-authored-by: Kavitha S --- .../dao/impl/CareContextRepositoryImpl.java | 20 +++++++++++++------ .../module/hip/model/PatientCareContext.java | 2 +- .../controller/CareContextControllerTest.java | 6 +++--- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index b044f208..ebc058cd 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -24,9 +24,7 @@ public CareContextRepositoryImpl(SessionFactory sessionFactory) { @Override public List getPatientCareContext(String patientUuid) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT\n" + - " case\n" + - " when care_context = 'PROGRAM' then value_reference\n" + - " else visit_type_id end as careContextReference,\n" + + " provider_name as careContextReference,\n" + " care_context as careContextType,\n" + " case when care_context = 'PROGRAM' then\n" + " concat (program_name,\" / \",visit_startDate)\n" + @@ -38,6 +36,9 @@ public List getPatientCareContext(String patientUuid) { " select\n" + " ppa.value_reference,p3.uuid,e.patient_id, p2.program_id, vt.visit_type_id , vt.name ,\n" + " v.date_started As visit_startDate,\n" + + " concat(pn.given_name, ifnull(concat(' ',pn.middle_name),'')," + + " ifnull(concat(' ',pn.family_name_prefix),''), ifnull(concat(' ',pn.family_name),''), " + + " ifnull(concat(' ',pn.family_name2),''), ifnull(concat(' ',pn.family_name_suffix),'')) as provider_name,\n" + " pp.patient_program_id , p2.name as program_name, vt.name as visit_type_name,\n" + " case\n" + " when p2.program_id is null then 'VISIT_TYPE'\n" + @@ -58,6 +59,8 @@ public List getPatientCareContext(String patientUuid) { " and v.patient_id = e.patient_id\n" + " left join visit_type vt on\n" + " v.visit_type_id = vt.visit_type_id\n" + + " left join users u on e.creator = u.user_id\n" + + " left join person_name pn ON pn.person_id = u.person_id\n" + " left join person p3 on\n" + " \te.patient_id = p3.person_id\n" + " left join patient_program_attribute ppa on\n" + @@ -69,7 +72,7 @@ public List getPatientCareContext(String patientUuid) { "case when care_context = 'PROGRAM' \n" + "then patient_program_id else visit_type_id \n" + "end") - .addScalar("careContextReference", IntegerType.INSTANCE) + .addScalar("careContextReference", StringType.INSTANCE) .addScalar("careContextType", StringType.INSTANCE) .addScalar("careContextName", StringType.INSTANCE); query.setParameter("patientUuid", patientUuid); @@ -84,7 +87,7 @@ public List getNewPatientCareContext(Integer patientId) { " else\n" + " concat (visit_type_name,\" / \",visit_startDate)\n" + " end as careContextName,\n" + - " case when care_context_type = 'PROGRAM' then value_reference else visit_type_id end as careContextReference\n" + + " provider_name as careContextReference\n" + "from\n" + " (\n" + " select\n" + @@ -94,6 +97,9 @@ public List getNewPatientCareContext(Integer patientId) { " p2.program_id,\n" + " vt.visit_type_id,\n" + " v.date_started As visit_startDate,\n" + + " concat(pn.given_name, ifnull(concat(' ',pn.middle_name),'')," + + " ifnull(concat(' ',pn.family_name_prefix),''), ifnull(concat(' ',pn.family_name),''), " + + " ifnull(concat(' ',pn.family_name2),''), ifnull(concat(' ',pn.family_name_suffix),'')) as provider_name,\n" + " vt.name,\n" + " pp.patient_program_id,\n" + " p2.name as program_name,\n" + @@ -110,6 +116,8 @@ public List getNewPatientCareContext(Integer patientId) { " left join visit_type vt on v.visit_type_id = vt.visit_type_id\n" + " left join person p3 on e.patient_id = p3.person_id\n" + " left join patient_program_attribute ppa on pp.patient_program_id = ppa.patient_program_id\n" + + " left join users u on e.creator = u.user_id\n" + + " left join person_name pn ON pn.person_id = u.person_id\n" + " where\n" + " v.visit_id = (\n" + " select\n" + @@ -121,7 +129,7 @@ public List getNewPatientCareContext(Integer patientId) { " )\n" + " ) as a\n" + "group by\n" + - " visit_startDate;\n").addScalar("careContextReference", IntegerType.INSTANCE) + " visit_startDate;\n").addScalar("careContextReference", StringType.INSTANCE) .addScalar("careContextType", StringType.INSTANCE) .addScalar("careContextName", StringType.INSTANCE); query.setParameter("patientId", patientId); diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java index a2c9a603..58605fd3 100644 --- a/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientCareContext.java @@ -14,7 +14,7 @@ public class PatientCareContext { private String careContextType; private String careContextName; - private Integer careContextReference; + private String careContextReference; public String getCareContextName() { return careContextName; diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java index 1a2f5cdb..96b5c8ad 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/CareContextControllerTest.java @@ -58,7 +58,7 @@ public void shouldReturn200OkWhenPatientIdIsGiven() throws Exception { patientCareContextList.add(PatientCareContext.builder() .careContextName("TB Program") .careContextType("PROGRAM") - .careContextReference(4) + .careContextReference("SUPER MAN") .build()); when(careContextService.careContextForPatient(anyString())) .thenReturn(patientCareContextList); @@ -76,7 +76,7 @@ public void shouldReturn400BadRequestWhenPatientIdContainsCharacters() throws Ex patientCareContextList.add(PatientCareContext.builder() .careContextName("TB Program") .careContextType("PROGRAM") - .careContextReference(4) + .careContextReference("SUPER MAN") .build()); when(careContextService.careContextForPatient(anyString())) .thenReturn(patientCareContextList); @@ -98,7 +98,7 @@ public void shouldReturn400BadRequestWhenNoPatientIdProvided() throws Exception patientCareContextList.add(PatientCareContext.builder() .careContextName("TB Program") .careContextType("PROGRAM") - .careContextReference(4) + .careContextReference("SUPER MAN") .build()); when(careContextService.careContextForPatient(anyString())) .thenReturn(patientCareContextList); From b094f1193789d6d0fb35fd6d4cebfd83eec0e432 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Thu, 5 May 2022 11:51:31 +0530 Subject: [PATCH 165/264] BAH-1610 | refactor. reverted program care-context reference without date Co-authored-by: SanoferSameera --- .../api/dao/impl/CareContextRepositoryImpl.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index ebc058cd..bf79a4c1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -24,10 +24,11 @@ public CareContextRepositoryImpl(SessionFactory sessionFactory) { @Override public List getPatientCareContext(String patientUuid) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT\n" + - " provider_name as careContextReference,\n" + + " case\n" + + " when care_context = 'PROGRAM' then value_reference\n" + + " else provider_name end as careContextReference,\n" + " care_context as careContextType,\n" + - " case when care_context = 'PROGRAM' then\n" + - " concat (program_name,\" / \",visit_startDate)\n" + + " case when care_context = 'PROGRAM' then program_name\n" + " else\n" + " concat (visit_type_name,\" / \",visit_startDate)\n" + " end as careContextName\n" + @@ -82,12 +83,13 @@ public List getPatientCareContext(String patientUuid) { public List getNewPatientCareContext(Integer patientId) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select\n" + " care_context_type as careContextType,\n" + - " case when care_context_type = 'PROGRAM' then\n" + - " concat (program_name,\" / \",visit_startDate)\n" + + " case when care_context_type = 'PROGRAM' then program_name\n" + " else\n" + " concat (visit_type_name,\" / \",visit_startDate)\n" + " end as careContextName,\n" + - " provider_name as careContextReference\n" + + " case when care_context = 'PROGRAM' then value_reference\n" + + " else\n" + + " provider_name end as careContextReference,\n" + "from\n" + " (\n" + " select\n" + From be58df28a562235f3c29a418e1861cb2ab8513d1 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 6 May 2022 12:26:30 +0530 Subject: [PATCH 166/264] BAH-1628 | Refactor. removed from and to date from encounter and lab result visit query Co-authored-by: Kavitha S --- .../org/bahmni/module/hip/api/dao/EncounterDao.java | 4 ++-- .../org/bahmni/module/hip/api/dao/HipVisitDao.java | 2 +- .../module/hip/api/dao/impl/EncounterDaoImpl.java | 11 ++--------- .../module/hip/api/dao/impl/HipVisitDaoImpl.java | 8 ++------ 4 files changed, 7 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java index cbf5b764..c8f855c6 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java @@ -5,8 +5,8 @@ public interface EncounterDao { - List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) ; + List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate) ; List GetEncounterIdsForProgramForPrescriptions(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForDiagnosticReport(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); - List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit,Date visitStartDate, Date fromDate, Date toDate) ; + List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit,Date visitStartDate) ; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java index 3b8edd3c..8a884bf6 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java @@ -6,6 +6,6 @@ public interface HipVisitDao { List GetVisitIdsForProgramForLabResults(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); - List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) ; + List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate) ; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index d295ca4f..e76ae9a2 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -38,7 +38,6 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { "\t\tencounter_id\n" + "\tfrom\n" + "\t\tepisode_encounter)\n" + - "\tand v.date_started between :fromDate and :toDate\n" + "\tand v.patient_id = (select person_id from person as p2 where p2.uuid = :patientUUID);"; private String sqlGetEncounterIdsForProgramForPrescriptions = "SELECT\n" + @@ -111,8 +110,6 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " inner join episode_encounter ee on e2.encounter_id = ee.encounter_id\n" + " )\n" + " )\n" + - " and v.date_started between :fromDate\n" + - " and :toDate\n" + " and v.patient_id = (\n" + " select\n" + " person_id\n" + @@ -180,13 +177,11 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " and :toDate ;\n"; @Override - public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForPrescriptions); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); - query.setParameter("fromDate", fromDate); - query.setParameter("toDate", toDate); query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); @@ -217,13 +212,11 @@ public List GetEncounterIdsForProgramForDiagnosticReport(String patient } @Override - public List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date visitStartDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForDiagnosticReports); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); - query.setParameter("fromDate", fromDate); - query.setParameter("toDate", toDate); query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java index baf945fe..4008f33f 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java @@ -26,8 +26,7 @@ public HipVisitDaoImpl(SessionFactory sessionFactory) { "where \n" + " vt.name = :visit \n" + " and v.date_started = :visitStartDate \n" + - " and v.date_started between :fromDate and :toDate and\n" + - "e.visit_id not in (select e1.visit_id from encounter as e1 inner join episode_encounter on episode_encounter.encounter_id = e1.encounter_id) \n" + + " and e.visit_id not in (select e1.visit_id from encounter as e1 inner join episode_encounter on episode_encounter.encounter_id = e1.encounter_id) \n" + "and v.patient_id in (select person_id from person as p2 where p2.uuid = :patientUUID) ;" ; private String sqlGetVisitIdsForProgramForLabResults = "\n" + @@ -54,15 +53,12 @@ public List GetVisitIdsForProgramForLabResults(String patientUUID, Stri } @Override - public List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate) { Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetVisitIdsForVisitForLabResults); query.setParameter("patientUUID", patientUUID); query.setParameter("visit", visit); - query.setParameter("fromDate", fromDate); - query.setParameter("toDate", toDate); query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); - return query.list(); } } From 06e47508746a96173fec288979b277cb0fab2976 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 6 May 2022 12:33:05 +0530 Subject: [PATCH 167/264] BAH-1628 | Refactor. removed from and to date from consultation and opConsult visit query Co-authored-by: Kavitha S --- .../module/hip/api/dao/ConsultationDao.java | 6 ++--- .../module/hip/api/dao/OPConsultDao.java | 6 ++--- .../hip/api/dao/impl/ConsultationDaoImpl.java | 26 +++++-------------- .../hip/api/dao/impl/OPConsultDaoImpl.java | 21 ++++----------- .../web/controller/OPConsultController.java | 6 +++-- .../hip/web/service/ConsultationService.java | 22 ++++++++-------- .../hip/web/service/OPConsultService.java | 22 +++++++--------- .../controller/OPConsultControllerTest.java | 6 ++--- 8 files changed, 45 insertions(+), 70 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java index 74bc747c..551a57b5 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java @@ -7,10 +7,10 @@ import java.util.List; public interface ConsultationDao { - List getChiefComplaints(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getChiefComplaints(Patient patient, String visit, Date visitStartDate); List getChiefComplaintForProgram(String programName, Date fromDate, Date toDate, Patient patient); - List getPhysicalExamination(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); - List getOrders(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getPhysicalExamination(Patient patient, String visit, Date visitStartDate); + List getOrders(Patient patient, String visit, Date visitStartDate); List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index d6f9b65e..49eaeafd 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -10,9 +10,9 @@ import java.util.Map; public interface OPConsultDao { - Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); - List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); - List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate); + List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate); + List getProcedures(Patient patient, String visit, Date visitStartDate); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 955fe1d3..2029d12c 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -48,8 +48,8 @@ public ConsultationDaoImpl(ObsService obsService, OrderService orderService, Pro } @Override - public List getChiefComplaints(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - List patientObs = getAllObsBetweenDates(patient, fromDate, toDate); + public List getChiefComplaints(Patient patient, String visit, Date visitStartDate) { + List patientObs = obsService.getObservationsByPerson(patient); List chiefComplaintObsMap = new ArrayList<>(); for (Obs o : patientObs) { if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) @@ -81,15 +81,6 @@ public List getChiefComplaintForProgram(String programName, Date fromDate, return obsSet; } - public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient) - .stream() - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) - && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) - .collect(Collectors.toList()); - return patientObs; - } - public List getAllObs(String programName, Date fromDate, Date toDate, Patient patient) { List patientPrograms = programWorkflowService.getPatientPrograms(patient, programWorkflowService.getProgramByName(programName), fromDate, toDate, null, null, false); Set patientProgramSet = new HashSet<>(patientPrograms); @@ -105,10 +96,10 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie } @Override - public List getPhysicalExamination(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public List getPhysicalExamination(Patient patient, String visit, Date visitStartDate) { final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; - List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); + List patientObs = obsService.getObservationsByPerson(patient); List physicalExaminationObsMap = new ArrayList<>(); for (Obs o : patientObs) { if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) @@ -126,13 +117,8 @@ public List getPhysicalExamination(Patient patient, String visit, Date visi } @Override - public List getOrders(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - List orders = orderService.getAllOrdersByPatient(patient) - .stream() - .filter(order -> order.getEncounter().getVisit().getStartDatetime().after(fromDate) - && order.getEncounter().getVisit().getStartDatetime().before(toDate)) - .collect(Collectors.toList()); - return orders.stream().filter(order -> matchesVisitType(visit, order)) + public List getOrders(Patient patient, String visit, Date visitStartDate) { + return orderService.getAllOrdersByPatient(patient).stream().filter(order -> matchesVisitType(visit, order)) .filter(order -> order.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) .filter(order -> order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION)) .filter(order -> ORDER_TYPES.contains(order.getOrderType().getName())) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index bc90aa19..9eaab521 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -47,14 +47,12 @@ public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService } @Override - public Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate) { final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; List encounters = encounterService.getEncountersByPatient(patient) .stream() .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation") && - encounter.getDateCreated().after(fromDate) && - encounter.getDateCreated().before(toDate) && encounter.getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && Objects.equals(encounter.getVisit().getVisitType().getName(), visit)) .collect(Collectors.toList()); @@ -89,18 +87,9 @@ public Map> getMedicalHistoryConditions(Patient patie return encounterConditionsMap; } - public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient) - .stream() - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) - && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) - .collect(Collectors.toList()); - return patientObs; - } - @Override - public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); + public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate) { + List patientObs = obsService.getObservationsByPerson(patient); List medicalHistoryDiagnosisObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) @@ -116,8 +105,8 @@ public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date } @Override - public List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); + public List getProcedures(Patient patient, String visit, Date visitStartDate) { + List patientObs = obsService.getObservationsByPerson(patient); List proceduresObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java index 58be9b50..62aea039 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -17,6 +17,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; +import java.util.ArrayList; import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; @@ -51,8 +52,9 @@ ResponseEntity getOpconsultForVisit(@RequestParam String patientId, return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); - List opConsultBundle = - opConsultService.getOpConsultsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType,parseDateTime(visitStartDate)); + List opConsultBundle = new ArrayList<>(); + if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) + opConsultBundle = opConsultService.getOpConsultsForVisit(patientId,visitType,parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 0ef48074..54d4d29e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -40,8 +40,8 @@ public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsu this.diagnosticReportService = diagnosticReportService; } - public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { - List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, visitStartDate, fromDate, toDate); + public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date visitStartDate) { + List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, visitStartDate); return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } @@ -50,8 +50,8 @@ public ConcurrentHashMap> getEncounterChiefCom return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } - public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { - List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, visitStartDate, fromDate, toDate); + public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date visitStartDate) { + List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, visitStartDate); return getEncounterListMapForPhysicalExamination(physicalExaminations); } @@ -60,9 +60,9 @@ public Map> getEncounterPhysicalExaminationMapForProgram(St return getEncounterListMapForPhysicalExamination(physicalExaminations); } - public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, visitStartDate, fromDate, toDate); - List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, visitStartDate, fromDate, toDate); + public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date visitStartDate) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, visitStartDate); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, visitStartDate); return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } @@ -72,9 +72,9 @@ public Map> getEncounterMedicalHistoryConditio return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } - public Map> getEncounterPatientDocumentsMap(String visitType, Date visitStartDate, Date fromDate, Date toDate, Patient patient) { + public Map> getEncounterPatientDocumentsMap(String visitType, Date visitStartDate, Patient patient) { final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(fromDate, toDate, patient, visitType, visitStartDate); + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(patient, visitType, visitStartDate); return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } @@ -84,8 +84,8 @@ public Map> getEncounterPatientDocumentsMapForProgram(Strin return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } - public Map> getEncounterOrdersMap(String visitType, Date visitStartDate, Date fromDate, Date toDate, Patient patient) { - List orders = consultationDao.getOrders(patient, visitType, visitStartDate, fromDate, toDate); + public Map> getEncounterOrdersMap(String visitType, Date visitStartDate, Patient patient) { + List orders = consultationDao.getOrders(patient, visitType, visitStartDate); return getEncounterListMapForOrders(orders); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index 2332b961..6237c7a7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -40,19 +40,17 @@ public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, this.consultationService = consultationService; } - public List getOpConsultsForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { - Date fromDate = dateRange.getFrom(); - Date toDate = dateRange.getTo(); + public List getOpConsultsForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType, visitStartDate)); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, visitType, visitStartDate)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, fromDate, toDate, patient); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, fromDate, toDate, patient); + Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, patient); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, patient); List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, @@ -84,8 +82,8 @@ public List getOpConsultsForProgram(String patientUuid, DateRan map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { - List obsProcedures = opConsultDao.getProcedures(patient, visitType,visitStartDate,fromDate, toDate); + private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate) { + List obsProcedures = opConsultDao.getProcedures(patient, visitType,visitStartDate); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java index 148d516c..b720b7b9 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/OPConsultControllerTest.java @@ -51,7 +51,7 @@ public void setup() { public void shouldReturn200ForVisits() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) + when(opConsultService.getOpConsultsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) @@ -68,7 +68,7 @@ public void shouldReturn200ForVisits() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) + when(opConsultService.getOpConsultsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) @@ -85,7 +85,7 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(opConsultService.getOpConsultsForVisit(anyString(), any(), anyString(),any())) + when(opConsultService.getOpConsultsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/opConsults/visit", RestConstants.VERSION_1)) From 9393d36653642ee1e4bcb5a8d45c649967489ca4 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 6 May 2022 12:37:50 +0530 Subject: [PATCH 168/264] BAH-1628 | Refactor. removed from and to date from prescription and drugOrder visit query Co-authored-by: Kavitha S --- .../module/hip/api/dao/PrescriptionOrderDao.java | 2 +- .../hip/api/dao/impl/PrescriptionOrderDaoImpl.java | 12 +++--------- .../hip/web/controller/PrescriptionController.java | 6 ++++-- .../hip/web/service/OpenMRSDrugOrderClient.java | 4 ++-- .../module/hip/web/service/PrescriptionService.java | 4 ++-- .../web/controller/PrescriptionControllerTest.java | 6 +++--- .../hip/web/service/OpenMRSDrugOrderClientTest.java | 4 ++-- 7 files changed, 17 insertions(+), 21 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java index 82348449..c32b91af 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java @@ -8,7 +8,7 @@ import java.util.List; public interface PrescriptionOrderDao { - List getDrugOrders(Patient patient, Date fromDate, Date toDate, String visitType, Date visitStartDate); + List getDrugOrders(Patient patient, String visitType, Date visitStartDate); List getDrugOrdersForProgram(Patient patient, Date fromDate, Date toDate, OrderType orderType, String program, String programEnrollmentId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index f7719643..32ad0fc1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -35,19 +35,13 @@ public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao enco this.orderService = orderService; } - public List getDrugOrders(Patient patient, Date fromDate, Date toDate, String visitType, Date visitStartDate) { + public List getDrugOrders(Patient patient,String visitType, Date visitStartDate) { - Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType,visitStartDate, fromDate, toDate).toArray(new Integer[0]); + Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType,visitStartDate).toArray(new Integer[0]); if(encounterIds.length == 0) return new ArrayList< DrugOrder > (); - List orders = orderService.getAllOrdersByPatient(patient) - .stream() - .filter(order -> order.getEncounter().getVisit().getDateCreated().after(fromDate) - && order.getEncounter().getVisit().getDateCreated().before(toDate)) - .collect(Collectors.toList()); - - List orderLists = orders.stream() + List orderLists = orderService.getAllOrdersByPatient(patient).stream() .filter(order -> Arrays.asList(encounterIds).contains(order.getEncounter().getId()) && order.getEncounter().getVisit().getVisitType().getName().equals(visitType) && order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 7ba7b178..7fa45122 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -17,6 +17,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; +import java.util.ArrayList; import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; @@ -53,8 +54,9 @@ ResponseEntity getPrescriptionForVisit( return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); - List prescriptionBundle = - prescriptionService.getPrescriptions(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDateTime(visitStartDate)); + List prescriptionBundle = new ArrayList<>(); + if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) + prescriptionBundle = prescriptionService.getPrescriptions(patientId, visitType, parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledPrescriptionResponse(prescriptionBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 93074276..983f34d2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -49,10 +49,10 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID, DateRange dateRange, String visitType, Date visitStartDate) { + List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID,String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(forPatientUUID); return prescriptionOrderDao - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), visitType, visitStartDate); + .getDrugOrders(patient, visitType, visitStartDate); } List getDrugOrdersByDateAndProgramFor(String forPatientUUID, DateRange dateRange, String programName, String programEnrolmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index bbf7d69c..940c6a75 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -28,8 +28,8 @@ public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBu } - public List getPrescriptions(String patientIdUuid, DateRange dateRange, String visitType, Date visitStartDate) { - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, dateRange, visitType, visitStartDate)); + public List getPrescriptions(String patientIdUuid,String visitType, Date visitStartDate) { + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, visitType, visitStartDate)); if (drugOrders.isEmpty()) return new ArrayList<>(); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java index 5756fc29..f076f898 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/PrescriptionControllerTest.java @@ -51,7 +51,7 @@ public void setup() { public void shouldReturn200OForValidVisit() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) + when(prescriptionService.getPrescriptions(anyString(),anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") @@ -66,7 +66,7 @@ public void shouldReturn200OForValidVisit() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) + when(prescriptionService.getPrescriptions(anyString(),anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "OP") @@ -82,7 +82,7 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(prescriptionService.getPrescriptions(anyString(), any(), anyString(),any())) + when(prescriptionService.getPrescriptions(anyString(),anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/prescriptions/visit", RestConstants.VERSION_1)) .param("visitType", "IPD") diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index ad884c0f..401a9ae1 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -120,9 +120,9 @@ public void shouldFetchDrugOrdersForADateRangeAndAPatient() { .thenReturn(patient); when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); - openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, dateRange, visitType, visitStartDate); + openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, visitType, visitStartDate); verify(prescriptionOrderDao, times(1)) - .getDrugOrders(patient, dateRange.getFrom(), dateRange.getTo(), visitType, visitStartDate); + .getDrugOrders(patient, visitType, visitStartDate); } } From 88a727626c7e1d6b37509b0301f31d76168002e1 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 6 May 2022 12:40:58 +0530 Subject: [PATCH 169/264] BAH-1628 | Refactor. removed from and to date from discharge summary and diagnostic report visit query Co-authored-by: Kavitha S --- .../hip/api/dao/DischargeSummaryDao.java | 4 +-- .../api/dao/impl/DischargeSummaryDaoImpl.java | 17 +++-------- .../DiagnosticReportController.java | 9 ++++-- .../DischargeSummaryController.java | 7 +++-- .../web/service/DiagnosticReportService.java | 21 ++++++-------- .../web/service/DischargeSummaryService.java | 28 +++++++++---------- .../DiagnosticReportControllerTest.java | 6 ++-- 7 files changed, 42 insertions(+), 50 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java index 73a4ed5f..f1e26d31 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java @@ -6,8 +6,8 @@ import java.util.List; public interface DischargeSummaryDao { - List getCarePlan(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); - List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate); + List getCarePlan(Patient patient, String visit, Date visitStartDate); + List getProcedures(Patient patient, String visit, Date visitStartDate); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index f7a691e5..196748bb 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -41,9 +41,9 @@ private boolean matchesVisitType(String visitType, Obs obs) { } @Override - public List getCarePlan(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { + public List getCarePlan(Patient patient, String visit, Date visitStartDate) { final String obsName = "Discharge Summary"; - List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); + List patientObs = obsService.getObservationsByPerson(patient); List carePlanObs = patientObs.stream().filter(obs -> matchesVisitType(visit, obs)) .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) .filter(obs -> obsName.equals(obs.getConcept().getName().getName())) @@ -75,8 +75,8 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t } @Override - public List getProcedures(Patient patient, String visit, Date visitStartDate, Date fromDate, Date toDate) { - List patientObs = getAllObsBetweenDates(patient,fromDate,toDate); + public List getProcedures(Patient patient, String visit, Date visitStartDate) { + List patientObs = obsService.getObservationsByPerson(patient); List proceduresObsMap = new ArrayList<>(); for(Obs o :patientObs){ if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) @@ -113,13 +113,4 @@ public List getProceduresForProgram(String programName, Date fromDate, Date } return proceduresObsSet; } - - public List getAllObsBetweenDates(Patient patient, Date fromDate, Date toDate) { - List patientObs = obsService.getObservationsByPerson(patient) - .stream() - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().after(fromDate) - && obs.getEncounter().getVisit().getStartDatetime().before(toDate)) - .collect(Collectors.toList()); - return patientObs; - } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java index b8629286..3b398fe5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java @@ -21,6 +21,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; +import java.util.ArrayList; import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; @@ -55,11 +56,13 @@ ResponseEntity getDiagnosticReportsForVisit(@RequestParam String patientId, return ResponseEntity.badRequest().body(ClientError.invalidVisitType()); if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); - List diagnosticReportBundle = - diagnosticReportService.getDiagnosticReportsForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType,parseDateTime(visitStartDate)); - diagnosticReportBundle.addAll( diagnosticReportService.getLabResultsForVisits(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType ,parseDateTime(visitStartDate))); + List diagnosticReportBundle = new ArrayList<>(); + if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) { + diagnosticReportBundle = diagnosticReportService.getDiagnosticReportsForVisit(patientId, visitType, parseDateTime(visitStartDate)); + diagnosticReportBundle.addAll(diagnosticReportService.getLabResultsForVisits(patientId, visitType, parseDateTime(visitStartDate))); + } return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledDiagnosticReportResponse(diagnosticReportBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java index 65ba3737..f8445459 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -21,6 +21,7 @@ import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; +import java.util.ArrayList; import java.util.List; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; @@ -58,8 +59,10 @@ ResponseEntity getDischargeSummaryForVisit(@RequestParam String patientId, if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); - List dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), visitType, parseDateTime(visitStartDate)); - + List dischargeSummaryBundle = new ArrayList<>(); + if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) { + dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, visitType, parseDateTime(visitStartDate)); + } return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 659dc8b8..fcefbe99 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -62,11 +62,9 @@ public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDia } - public List getDiagnosticReportsForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { - Date fromDate = dateRange.getFrom(); - Date toDate = dateRange.getTo(); + public List getDiagnosticReportsForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); - HashMap> encounterListMap = getAllObservationsForVisits(fromDate, toDate, patient, visitType,visitStartDate); + HashMap> encounterListMap = getAllObservationsForVisits(patient, visitType,visitStartDate); List openMrsDiagnosticReports = OpenMrsDiagnosticReport.fromDiagnosticReport(encounterListMap); return openMrsDiagnosticReports @@ -75,11 +73,10 @@ public List getDiagnosticReportsForVisit(String patientU .collect(Collectors.toList()); } - public HashMap> getAllObservationsForVisits(Date fromDate, Date toDate, - Patient patient, + public HashMap> getAllObservationsForVisits(Patient patient, String visitType, Date visitStartDate) { HashMap> encounterListMap = new HashMap<>(); - List encounterIds = encounterDao.GetEncounterIdsForVisitForDiagnosticReport(patient.getUuid(), visitType, visitStartDate, fromDate, toDate); + List encounterIds = encounterDao.GetEncounterIdsForVisitForDiagnosticReport(patient.getUuid(), visitType, visitStartDate); List finalList = new ArrayList<>(); for(Integer encounterId : encounterIds){ finalList.add(encounterService.getEncounter(encounterId)); @@ -121,7 +118,7 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } - private List getLabResults(String patientUuid, DateRange dateRange, List visitsForVisitType) { + private List getLabResults(String patientUuid, List visitsForVisitType) { Patient patient = patientService.getPatientByUuid(patientUuid); List visits, visitsWithOrdersForVisitType ; @@ -148,16 +145,16 @@ private List getLabResults(String patientUuid, DateRange List bundles = labResults.stream().map(fhirBundledDiagnosticReportBuilder::fhirBundleResponseFor).collect(Collectors.toList()); return bundles; } - public List getLabResultsForVisits(String patientUuid, DateRange dateRange, String visittype, Date visitStartDate) + public List getLabResultsForVisits(String patientUuid, String visittype, Date visitStartDate) { - List visitsForVisitType = hipVisitDao.GetVisitIdsForVisitForLabResults(patientUuid, visittype,visitStartDate, dateRange.getFrom(), dateRange.getTo() ); - return getLabResults(patientUuid, dateRange, visitsForVisitType); + List visitsForVisitType = hipVisitDao.GetVisitIdsForVisitForLabResults(patientUuid, visittype,visitStartDate ); + return getLabResults(patientUuid, visitsForVisitType); } public List getLabResultsForPrograms(String patientUuid, DateRange dateRange, String programName, String programEnrollmentId) { List visitsForProgram = hipVisitDao.GetVisitIdsForProgramForLabResults(patientUuid, programName, programEnrollmentId, dateRange.getFrom(), dateRange.getTo() ); - return getLabResults(patientUuid, dateRange, visitsForProgram); + return getLabResults(patientUuid, visitsForProgram); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index f9609e93..a8933c9c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -40,19 +40,17 @@ public DischargeSummaryService(PatientService patientService, DischargeSummaryDa this.consultationService = consultationService; } - public List getDischargeSummaryForVisit(String patientUuid, DateRange dateRange, String visitType, Date visitStartDate) { - Date fromDate = dateRange.getFrom(); - Date toDate = dateRange.getTo(); + public List getDischargeSummaryForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, dateRange, visitType,visitStartDate)); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, visitType,visitStartDate)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate, fromDate, toDate); - ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, fromDate, toDate, patient); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate, fromDate, toDate); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, fromDate, toDate, patient); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate); + ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, patient); + Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, patient); List openMrsDischargeSummaryList = OpenMrsDischargeSummary.getOpenMrsDischargeSummaryList(encounterDischargeSummaryMap, encounteredDrugOrdersMap, encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounterPatientDocumentsMap, encounterProcedureMap, encounterOrdersMap, patient); return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); @@ -76,8 +74,8 @@ public List getDischargeSummaryForProgram(String patient } - private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { - List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType,visitStartDate, fromDate, toDate); + private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date visitStartDate) { + List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType,visitStartDate); return getEncounterListMapForCarePlan(carePlanObs); } @@ -98,8 +96,8 @@ private Map> getEncounterCarePlanMapForProgram(String progr return getEncounterListMapForCarePlan(carePlanObs); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate, Date fromDate, Date toDate) { - List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, visitStartDate, fromDate, toDate); + private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate) { + List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, visitStartDate); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java b/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java index 4cda2549..c026c6f1 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/controller/DiagnosticReportControllerTest.java @@ -51,7 +51,7 @@ public void setup() { public void shouldReturn200ForVisits() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) @@ -68,7 +68,7 @@ public void shouldReturn200ForVisits() throws Exception { public void shouldReturn400OnInvalidVisitType() throws Exception { when(validationService.isValidVisit("OP")).thenReturn(false); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745bd")).thenReturn(true); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) @@ -85,7 +85,7 @@ public void shouldReturn400OnInvalidVisitType() throws Exception { public void shouldReturn400OnInvalidPatientId() throws Exception { when(validationService.isValidVisit("IPD")).thenReturn(true); when(validationService.isValidPatient("0f90531a-285c-438b-b265-bb3abb4745")).thenReturn(false); - when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), any(), anyString(),any())) + when(diagnosticReportService.getDiagnosticReportsForVisit(anyString(), anyString(),any())) .thenReturn(EMPTY_LIST); mockMvc.perform(get(String.format("/rest/%s/hip/diagnosticReports/visit", RestConstants.VERSION_1)) From 6a93f6b94b533df40cf70913b3e7063ca7dd8375 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 6 May 2022 12:42:29 +0530 Subject: [PATCH 170/264] Fixed. error in fetching chief complaint Co-authored-by: Kavitha S --- .../java/org/bahmni/module/hip/web/model/FhirOPConsult.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index bab58398..f477c629 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -104,7 +104,7 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu fhirChiefComplaintConditionList.add(fhirResourceMapper.mapToCondition(openMrsOPConsult.getChiefComplaintConditions().get(i), patient)); } List fhirMedicalHistoryList = new ArrayList<>(); - for(int i=0;i fhirObservationList = openMrsOPConsult.getObservations().stream(). From a5347c46476011e3047f982d6b688924b8eda86b Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 11 May 2022 12:52:20 +0530 Subject: [PATCH 171/264] BAH-1439 | Refactor. renamed file name --- .../workflows/{build_and_deploy.yml => build_and_upload.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{build_and_deploy.yml => build_and_upload.yml} (96%) diff --git a/.github/workflows/build_and_deploy.yml b/.github/workflows/build_and_upload.yml similarity index 96% rename from .github/workflows/build_and_deploy.yml rename to .github/workflows/build_and_upload.yml index 11bd8c5c..af975030 100644 --- a/.github/workflows/build_and_deploy.yml +++ b/.github/workflows/build_and_upload.yml @@ -14,7 +14,7 @@ env: jobs: build: - name: build and deploy hip omod + name: build and upload hip omod runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 From e00bf85167c81780c1d4f04ebcf0bcde60ebf13c Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 18 May 2022 15:56:55 +0530 Subject: [PATCH 172/264] BAH-1628 | Add. method to extract encounters, obs and orders from visit obj --- .../module/hip/api/dao/EncounterDao.java | 11 +- .../hip/api/dao/impl/EncounterDaoImpl.java | 116 +++++++----------- 2 files changed, 52 insertions(+), 75 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java index c8f855c6..b2206cb1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java @@ -1,12 +1,19 @@ package org.bahmni.module.hip.api.dao; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Visit; + import java.util.Date; import java.util.List; public interface EncounterDao { - List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate) ; + List GetEpisodeEncounterIds(); + List GetOrdersForVisit(Visit visit); + List GetEncountersForVisit(Visit visit, String encounterType); + List GetAllObsForVisit(Visit visit, String encounterType, String conceptName); List GetEncounterIdsForProgramForPrescriptions(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForDiagnosticReport(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); - List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit,Date visitStartDate) ; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index e76ae9a2..0b77a56a 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -3,11 +3,12 @@ import org.bahmni.module.hip.api.dao.EncounterDao; import org.hibernate.Query; import org.hibernate.SessionFactory; +import org.openmrs.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Repository public class EncounterDaoImpl implements EncounterDao { @@ -22,23 +23,10 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } - private String sqlGetEncounterIdsForVisitForPrescriptions = "select\n" + - "\te.encounter_id\n" + - "from\n" + - "\tvisit as v\n" + - "inner join visit_type as vt on\n" + - "\tvt.visit_type_id = v.visit_type_id\n" + - "inner join encounter as e on\n" + - "\te.visit_id = v.visit_id\n" + - "where\n" + - "\tvt.name = :visit\n" + - "\tand v.date_started = :visitStartDate\n" + - "\tand e.encounter_id not in (\n" + - "\tselect\n" + + private String sqlGetEpisodeEncounterIds = "select\n" + "\t\tencounter_id\n" + "\tfrom\n" + - "\t\tepisode_encounter)\n" + - "\tand v.patient_id = (select person_id from person as p2 where p2.uuid = :patientUUID);"; + "\t\tepisode_encounter\n"; private String sqlGetEncounterIdsForProgramForPrescriptions = "SELECT\n" + " le.encounter_id\n" + @@ -79,46 +67,6 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " )\n" + " AND le.date_started BETWEEN :fromDate AND :toDate ;\n"; - private String sqlGetEncounterIdsForVisitForDiagnosticReports = "select\n" + - " e.encounter_id\n" + - "from\n" + - " visit as v\n" + - " inner join visit_type as vt on vt.visit_type_id = v.visit_type_id\n" + - " inner join encounter as e on e.visit_id = v.visit_id\n" + - " inner join obs o on o.encounter_id = e.encounter_id\n" + - " inner join encounter_type as et on et.encounter_type_id = e.encounter_type\n" + - " inner join concept_name as cn on cn.concept_id = o.concept_id\n" + - "where\n" + - " (\n" + - " et.name ='" + RADIOLOGY_TYPE + "' or et.name = '" + PATIENT_DOCUMENT_TYPE + "'\n" + - " )\n" + - " and vt.name = :visit\n" + - " and v.date_started = :visitStartDate\n" + - " and cn.name = '" + DOCUMENT_TYPE + "'\n" + - " and o.void_reason is null\n" + - " and e.encounter_id not in (\n" + - " SELECT\n" + - " encounter_id\n" + - " from\n" + - " encounter e\n" + - " where\n" + - " e.visit_id in (\n" + - " SELECT\n" + - " visit_id\n" + - " from\n" + - " encounter e2\n" + - " inner join episode_encounter ee on e2.encounter_id = ee.encounter_id\n" + - " )\n" + - " )\n" + - " and v.patient_id = (\n" + - " select\n" + - " person_id\n" + - " from\n" + - " person as p2\n" + - " where\n" + - " p2.uuid = :patientUUID\n" + - " );"; - private String sqlGetEncounterIdsForProgramForDiagnosticReports = "SELECT\n" + " res.encounter_id\n" + "FROM\n" + @@ -177,14 +125,47 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " and :toDate ;\n"; @Override - public List GetEncounterIdsForVisitForPrescriptions(String patientUUID, String visit, Date visitStartDate) { + public List GetEpisodeEncounterIds() { - Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForPrescriptions); - query.setParameter("patientUUID", patientUUID); - query.setParameter("visit", visit); - query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); + Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEpisodeEncounterIds); return query.list(); + } + @Override + public List GetEncountersForVisit(Visit visit, String encounterType) { + List episodeEncounters = GetEpisodeEncounterIds(); + List encounters = visit.getEncounters().stream() + .filter(encounter -> !episodeEncounters.contains(encounter.getId())) + .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), encounterType)) + .collect(Collectors.toList()); + return encounters; + } + + @Override + public List GetAllObsForVisit(Visit visit, String encounterType, String conceptName) { + List observations = new ArrayList<>(); + List encounters = GetEncountersForVisit(visit,encounterType); + for (Encounter encounter : encounters) { + if(conceptName == null) + observations.addAll(encounter.getAllObs()); + observations.addAll(encounter.getAllObs().stream() + .filter(o -> Objects.equals(o.getConcept().getName().getName(), conceptName)) + .collect(Collectors.toList())); + } + return observations; + } + + @Override + public List GetOrdersForVisit(Visit visit) { + List episodeEncounters = GetEpisodeEncounterIds(); + List encounters = visit.getEncounters().stream() + .filter(encounter -> !episodeEncounters.contains(encounter.getId())) + .collect(Collectors.toList()); + List orderList = new ArrayList<>(); + for (Encounter encounter: encounters) { + orderList.addAll(encounter.getOrders()); + } + return orderList; } @Override @@ -210,15 +191,4 @@ public List GetEncounterIdsForProgramForDiagnosticReport(String patient return query.list(); } - - @Override - public List GetEncounterIdsForVisitForDiagnosticReport(String patientUUID, String visit, Date visitStartDate) { - - Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetEncounterIdsForVisitForDiagnosticReports); - query.setParameter("patientUUID", patientUUID); - query.setParameter("visit", visit); - query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); - - return query.list(); - } } From 0db3dadd7c5be3790318859cd7bea1d53be949e2 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 18 May 2022 16:01:47 +0530 Subject: [PATCH 173/264] BAH-1628 | Refactor. prescription service to use visit object --- .../module/hip/api/dao/HipVisitDao.java | 5 ++++- .../hip/api/dao/PrescriptionOrderDao.java | 3 ++- .../hip/api/dao/impl/HipVisitDaoImpl.java | 16 ++++++++++++++- .../dao/impl/PrescriptionOrderDaoImpl.java | 20 ++++++------------- .../web/service/OpenMRSDrugOrderClient.java | 7 +++---- .../hip/web/service/PrescriptionService.java | 16 ++++++++++++--- .../service/OpenMRSDrugOrderClientTest.java | 9 +++------ 7 files changed, 46 insertions(+), 30 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java index 8a884bf6..cb5f8306 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/HipVisitDao.java @@ -1,5 +1,8 @@ package org.bahmni.module.hip.api.dao; +import org.openmrs.Patient; +import org.openmrs.Visit; + import java.util.Date; import java.util.List; @@ -7,5 +10,5 @@ public interface HipVisitDao { List GetVisitIdsForProgramForLabResults(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); List GetVisitIdsForVisitForLabResults(String patientUUID, String visit, Date visitStartDate) ; - + Visit getPatientVisit(Patient patient, String visitType, Date visitStartDate); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java index c32b91af..d57dc6eb 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/PrescriptionOrderDao.java @@ -3,12 +3,13 @@ import org.openmrs.DrugOrder; import org.openmrs.OrderType; import org.openmrs.Patient; +import org.openmrs.Visit; import java.util.Date; import java.util.List; public interface PrescriptionOrderDao { - List getDrugOrders(Patient patient, String visitType, Date visitStartDate); + List getDrugOrders(Visit visit); List getDrugOrdersForProgram(Patient patient, Date fromDate, Date toDate, OrderType orderType, String program, String programEnrollmentId); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java index 4008f33f..127b7fe3 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/HipVisitDaoImpl.java @@ -3,20 +3,26 @@ import org.bahmni.module.hip.api.dao.HipVisitDao; import org.hibernate.Query; import org.hibernate.SessionFactory; +import org.openmrs.Patient; +import org.openmrs.Visit; +import org.openmrs.api.VisitService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; @Repository public class HipVisitDaoImpl implements HipVisitDao { private SessionFactory sessionFactory; + private VisitService visitService; @Autowired - public HipVisitDaoImpl(SessionFactory sessionFactory) { + public HipVisitDaoImpl(SessionFactory sessionFactory, VisitService visitService) { this.sessionFactory = sessionFactory; + this.visitService = visitService; } private String sqlGetVisitIdsForVisitForLabResults = @@ -61,4 +67,12 @@ public List GetVisitIdsForVisitForLabResults(String patientUUID, String query.setParameter("visitStartDate",new java.sql.Timestamp(visitStartDate.getTime())); return query.list(); } + + @Override + public Visit getPatientVisit(Patient patient, String visitType, Date visitStartDate){ + Visit visit = visitService.getVisitsByPatient(patient) + .stream().filter(obj -> obj.getStartDatetime().getTime() == visitStartDate.getTime()) + .filter(obj -> obj.getVisitType().getName().equals(visitType)).collect(Collectors.toList()).get(0); + return visit; + } } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 32ad0fc1..4f6dab92 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -11,19 +11,18 @@ import org.openmrs.Order; import org.openmrs.OrderType; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.api.OrderService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import java.util.ArrayList; -import java.util.Arrays; import java.util.Date; import java.util.List; import java.util.stream.Collectors; @Repository public class PrescriptionOrderDaoImpl implements PrescriptionOrderDao { - protected static final Log log = LogFactory.getLog(PrescriptionOrderDaoImpl.class); private SessionFactory sessionFactory; private EncounterDao encounterDao; private final OrderService orderService; @@ -35,18 +34,11 @@ public PrescriptionOrderDaoImpl(SessionFactory sessionFactory, EncounterDao enco this.orderService = orderService; } - public List getDrugOrders(Patient patient,String visitType, Date visitStartDate) { - - Integer [] encounterIds = encounterDao.GetEncounterIdsForVisitForPrescriptions(patient.getUuid(), visitType,visitStartDate).toArray(new Integer[0]); - if(encounterIds.length == 0) - return new ArrayList< DrugOrder > (); - - List orderLists = orderService.getAllOrdersByPatient(patient).stream() - .filter(order -> Arrays.asList(encounterIds).contains(order.getEncounter().getId()) - && order.getEncounter().getVisit().getVisitType().getName().equals(visitType) - && order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) - .map(order -> (DrugOrder) order) - .collect(Collectors.toList()); + public List getDrugOrders(Visit visit) { + List orderLists = encounterDao.GetOrdersForVisit(visit).stream() + .filter(order -> order.getOrderType().getUuid().equals(OrderType.DRUG_ORDER_TYPE_UUID)) + .map(order -> (DrugOrder) order) + .collect(Collectors.toList()); return orderLists; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java index 983f34d2..a2b118d3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClient.java @@ -6,12 +6,12 @@ import org.openmrs.Order; import org.openmrs.OrderType; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.api.OrderService; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -49,10 +49,9 @@ private boolean matchesVisitType(String visitType, Order order) { return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); } - List getDrugOrdersByDateAndVisitTypeFor(String forPatientUUID,String visitType, Date visitStartDate) { - Patient patient = patientService.getPatientByUuid(forPatientUUID); + List getDrugOrdersByDateAndVisitTypeFor(Visit visit) { return prescriptionOrderDao - .getDrugOrders(patient, visitType, visitStartDate); + .getDrugOrders(visit); } List getDrugOrdersByDateAndProgramFor(String forPatientUUID, DateRange dateRange, String programName, String programEnrolmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index 940c6a75..ee6386d9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -2,10 +2,14 @@ import org.apache.log4j.Logger; +import org.bahmni.module.hip.api.dao.HipVisitDao; import org.bahmni.module.hip.web.model.PrescriptionBundle; import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.model.DrugOrders; import org.bahmni.module.hip.web.model.OpenMrsPrescription; +import org.openmrs.Patient; +import org.openmrs.Visit; +import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,16 +24,22 @@ public class PrescriptionService { private final OpenMRSDrugOrderClient openMRSDrugOrderClient; private final FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder; + private final PatientService patientService; + private final HipVisitDao hipVisitDao; @Autowired - public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder) { + public PrescriptionService(OpenMRSDrugOrderClient openMRSDrugOrderClient, FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder, PatientService patientService, HipVisitDao hipVisitDao) { this.openMRSDrugOrderClient = openMRSDrugOrderClient; this.fhirBundledPrescriptionBuilder = fhirBundledPrescriptionBuilder; + this.patientService = patientService; + this.hipVisitDao = hipVisitDao; } - public List getPrescriptions(String patientIdUuid,String visitType, Date visitStartDate) { - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientIdUuid, visitType, visitStartDate)); + public List getPrescriptions(String patientUuid,String visitType, Date visitStartDate) { + Patient patient = patientService.getPatientByUuid(patientUuid); + Visit visit = hipVisitDao.getPatientVisit(patient,visitType,visitStartDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(visit)); if (drugOrders.isEmpty()) return new ArrayList<>(); diff --git a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java index 401a9ae1..c53d6380 100644 --- a/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java +++ b/omod/src/test/java/org/bahmni/module/hip/web/service/OpenMRSDrugOrderClientTest.java @@ -108,21 +108,18 @@ public void shouldFilterInOnlyDrugOrdersThatMatchTheType() { @Test public void shouldFetchDrugOrdersForADateRangeAndAPatient() { - DateRange dateRange = new DateRange(new Date(), new Date()); - String patientUUID = "0f90531a-285c-438b-b265-bb3abb4745bd"; - String visitType = "IPD"; - Date visitStartDate = new Date(); Patient patient = mock(Patient.class); OrderType orderType = mock(OrderType.class); + Visit visit = mock(Visit.class); when(patientService.getPatientByUuid(anyString())) .thenReturn(patient); when(orderService.getOrderTypeByUuid(any())).thenReturn(orderType); - openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUUID, visitType, visitStartDate); + openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(visit); verify(prescriptionOrderDao, times(1)) - .getDrugOrders(patient, visitType, visitStartDate); + .getDrugOrders(visit); } } From 1f5b61edf706ecf0b0dc2e564f975d157ac0ccef Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 18 May 2022 16:14:02 +0530 Subject: [PATCH 174/264] BAH-1628 | Refactor. consultation and opConsult to use visit object --- .../module/hip/api/dao/ConsultationDao.java | 8 ++- .../module/hip/api/dao/OPConsultDao.java | 7 ++- .../hip/api/dao/impl/ConsultationDaoImpl.java | 54 +++++----------- .../hip/api/dao/impl/OPConsultDaoImpl.java | 63 +++++++------------ .../hip/web/service/ConsultationService.java | 24 +++---- .../hip/web/service/OPConsultService.java | 26 +++++--- 6 files changed, 75 insertions(+), 107 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java index 551a57b5..abd5515e 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ConsultationDao.java @@ -3,14 +3,16 @@ import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; +import org.openmrs.Visit; + import java.util.Date; import java.util.List; public interface ConsultationDao { - List getChiefComplaints(Patient patient, String visit, Date visitStartDate); + List getChiefComplaints(Visit visit); List getChiefComplaintForProgram(String programName, Date fromDate, Date toDate, Patient patient); - List getPhysicalExamination(Patient patient, String visit, Date visitStartDate); - List getOrders(Patient patient, String visit, Date visitStartDate); + List getPhysicalExamination(Visit visit); + List getOrders(Visit visit); List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index 49eaeafd..19f2f9e9 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -3,6 +3,7 @@ import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.module.emrapi.conditionslist.Condition; import java.util.Date; @@ -10,9 +11,9 @@ import java.util.Map; public interface OPConsultDao { - Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate); - List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate); - List getProcedures(Patient patient, String visit, Date visitStartDate); + Map> getMedicalHistoryConditions(Visit visit); + List getMedicalHistoryDiagnosis(Visit visit); + List getProcedures(Visit visit); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 2029d12c..110e961b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -1,11 +1,13 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.ConsultationDao; +import org.bahmni.module.hip.api.dao.EncounterDao; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.PatientProgram; +import org.openmrs.Visit; import org.openmrs.api.ObsService; import org.openmrs.api.OrderService; import org.openmrs.api.ProgramWorkflowService; @@ -38,31 +40,22 @@ public class ConsultationDaoImpl implements ConsultationDao { }}; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; + private final EncounterDao encounterDao; @Autowired - public ConsultationDaoImpl(ObsService obsService, OrderService orderService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { + public ConsultationDaoImpl(ObsService obsService, OrderService orderService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService, EncounterDao encounterDao) { this.obsService = obsService; this.orderService = orderService; this.programWorkflowService = programWorkflowService; this.episodeService = episodeService; + this.encounterDao = encounterDao; } @Override - public List getChiefComplaints(Patient patient, String visit, Date visitStartDate) { - List patientObs = obsService.getObservationsByPerson(patient); - List chiefComplaintObsMap = new ArrayList<>(); - for (Obs o : patientObs) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) - && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) - && o.getValueCoded() != null - && o.getConcept().getName().getLocalePreferred() - ) - { - chiefComplaintObsMap.add(o); - } - } + public List getChiefComplaints(Visit visit) { + List chiefComplaintObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION,CHIEF_COMPLAINT) + .stream().filter(o -> o.getValueCoded() != null && o.getConcept().getName().getLocalePreferred()) + .collect(Collectors.toList()); return chiefComplaintObsMap; } @@ -96,39 +89,24 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie } @Override - public List getPhysicalExamination(Patient patient, String visit, Date visitStartDate) { + public List getPhysicalExamination(Visit visit) { final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; - List patientObs = obsService.getObservationsByPerson(patient); - List physicalExaminationObsMap = new ArrayList<>(); - for (Obs o : patientObs) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) - && o.getValueCoded() == null - && o.getConcept().getName().getLocalePreferred() - && o.getObsGroup() == null - && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) - ) { - physicalExaminationObsMap.add(o); - } - } + List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION,null) + .stream().filter(o -> o.getValueCoded() == null && o.getObsGroup() == null + && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) ) + .collect(Collectors.toList()); return physicalExaminationObsMap; } @Override - public List getOrders(Patient patient, String visit, Date visitStartDate) { - return orderService.getAllOrdersByPatient(patient).stream().filter(order -> matchesVisitType(visit, order)) - .filter(order -> order.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) + public List getOrders(Visit visit) { + return encounterDao.GetOrdersForVisit(visit).stream() .filter(order -> order.getDateStopped() == null && !Objects.equals(order.getAction().toString(), ORDER_ACTION)) .filter(order -> ORDER_TYPES.contains(order.getOrderType().getName())) .collect(Collectors.toList()); } - private boolean matchesVisitType(String visitType, Order order) { - return order.getEncounter().getVisit().getVisitType().getName().equals(visitType); - } - @Override public List getOrdersForProgram(String programName, Date fromDate, Date toDate, Patient patient) { List orderSet = new ArrayList<>(); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 9eaab521..532ce403 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -1,9 +1,11 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.PatientProgram; +import org.openmrs.Visit; import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; import org.openmrs.api.ProgramWorkflowService; @@ -35,44 +37,40 @@ public class OPConsultDaoImpl implements OPConsultDao { private final EncounterService encounterService; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; + private final EncounterDao encounterDao; @Autowired - public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { + public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService, EncounterService encounterService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService, EncounterDao encounterDao) { this.obsService = obsService; this.conditionService = conditionService; this.encounterService = encounterService; this.programWorkflowService = programWorkflowService; this.episodeService = episodeService; + this.encounterDao = encounterDao; } @Override - public Map> getMedicalHistoryConditions(Patient patient, String visit, Date visitStartDate) { + public Map> getMedicalHistoryConditions(Visit visit) { final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; - List encounters = encounterService.getEncountersByPatient(patient) - .stream() - .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation") && - encounter.getVisit().getStartDatetime().getTime() == visitStartDate.getTime() && - Objects.equals(encounter.getVisit().getVisitType().getName(), visit)) - .collect(Collectors.toList()); - List conditions = conditionService.getActiveConditions(patient) + List encounters = encounterDao.GetEncountersForVisit(visit, CONSULTATION); + List conditions = conditionService.getActiveConditions(visit.getPatient()) .stream() .filter(condition -> condition.getStatus().name().equals(conditionStatusActive) || condition.getStatus().name().equals(conditionStatusHistoryOf)) .collect(Collectors.toList()); - Map> encounterConditionsMap = new HashMap<>(); for(Condition condition : conditions){ for(Encounter encounter : encounters){ - Encounter nextEncounter; - Encounter encounterForNxtVisit = encounterService.getEncounter(encounter.getId() + 1); - Date nextEncounterDate = encounterForNxtVisit != null ? encounterForNxtVisit.getDateCreated() : new Date(); - if(encounters.indexOf(encounter) < (encounters.size() - 1)){ - nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); + Date nextEncounterDate; + if(encounters.indexOf(encounter) != 0){ + Encounter nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)-1).getId()); nextEncounterDate = nextEncounter.getDateCreated(); } + else + nextEncounterDate = new Date(); if (condition.getDateCreated().equals(encounter.getDateCreated()) || condition.getDateCreated().after(encounter.getDateCreated()) && condition.getDateCreated().before(nextEncounterDate)) { if (encounterConditionsMap.containsKey(encounter)) { encounterConditionsMap.get(encounter).add(condition); @@ -87,38 +85,19 @@ public Map> getMedicalHistoryConditions(Patient patie return encounterConditionsMap; } + @Override - public List getMedicalHistoryDiagnosis(Patient patient, String visit, Date visitStartDate) { - List patientObs = obsService.getObservationsByPerson(patient); - List medicalHistoryDiagnosisObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) - && Objects.equals(o.getConcept().getName().getName(), CODED_DIAGNOSIS) - ) - { - medicalHistoryDiagnosisObsMap.add(o); - } - } + public List getMedicalHistoryDiagnosis(Visit visit) { + List medicalHistoryDiagnosisObsMap = encounterDao.GetAllObsForVisit(visit, CONSULTATION, CODED_DIAGNOSIS); return medicalHistoryDiagnosisObsMap; } @Override - public List getProcedures(Patient patient, String visit, Date visitStartDate) { - List patientObs = obsService.getObservationsByPerson(patient); - List proceduresObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) - && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) - && !o.getVoided() - ) - { - proceduresObsMap.add(o); - } - } + public List getProcedures(Visit visit) { + List proceduresObsMap = encounterDao.GetAllObsForVisit(visit, CONSULTATION, PROCEDURE_NOTES).stream() + .filter(o -> !o.getVoided()) + .collect(Collectors.toList()); + return proceduresObsMap; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 54d4d29e..6c6c3c0e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -7,6 +7,7 @@ import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.module.emrapi.conditionslist.Condition; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -28,6 +29,7 @@ public class ConsultationService { private final ConsultationDao consultationDao; private final OPConsultDao opConsultDao; private final DiagnosticReportService diagnosticReportService; + public static Set conceptNames = new HashSet<>(Arrays.asList("Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Nutrition, Bal Vita Provided by FCHV","Bal Vita Provided by FCHV","ART, Condoms given","HIVTC, Marital Status","Malaria, Contact number", @@ -40,8 +42,8 @@ public ConsultationService(ConsultationDao consultationDao, OPConsultDao opConsu this.diagnosticReportService = diagnosticReportService; } - public ConcurrentHashMap> getEncounterChiefComplaintsMap(Patient patient, String visitType, Date visitStartDate) { - List chiefComplaints = consultationDao.getChiefComplaints(patient, visitType, visitStartDate); + public ConcurrentHashMap> getEncounterChiefComplaintsMap(Visit visit) { + List chiefComplaints = consultationDao.getChiefComplaints(visit); return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } @@ -50,8 +52,8 @@ public ConcurrentHashMap> getEncounterChiefCom return getEncounterListConcurrentHashMapForChiefComplaint(chiefComplaints); } - public Map> getEncounterPhysicalExaminationMap(Patient patient, String visitType, Date visitStartDate) { - List physicalExaminations = consultationDao.getPhysicalExamination(patient, visitType, visitStartDate); + public Map> getEncounterPhysicalExaminationMap(Visit visit) { + List physicalExaminations = consultationDao.getPhysicalExamination(visit); return getEncounterListMapForPhysicalExamination(physicalExaminations); } @@ -60,9 +62,9 @@ public Map> getEncounterPhysicalExaminationMapForProgram(St return getEncounterListMapForPhysicalExamination(physicalExaminations); } - public Map> getEncounterMedicalHistoryConditionsMap(Patient patient, String visit, Date visitStartDate) { - Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(patient, visit, visitStartDate); - List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(patient, visit, visitStartDate); + public Map> getEncounterMedicalHistoryConditionsMap(Visit visit) { + Map> medicalHistoryConditionsMap = opConsultDao.getMedicalHistoryConditions(visit); + List medicalHistoryDiagnosisMap = opConsultDao.getMedicalHistoryDiagnosis(visit); return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } @@ -72,9 +74,9 @@ public Map> getEncounterMedicalHistoryConditio return getEncounterListMapForMedicalHistory(medicalHistoryConditionsMap, medicalHistoryDiagnosisMap); } - public Map> getEncounterPatientDocumentsMap(String visitType, Date visitStartDate, Patient patient) { + public Map> getEncounterPatientDocumentsMap(Visit visit) { final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(patient, visitType, visitStartDate); + Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(visit); return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } @@ -84,8 +86,8 @@ public Map> getEncounterPatientDocumentsMapForProgram(Strin return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); } - public Map> getEncounterOrdersMap(String visitType, Date visitStartDate, Patient patient) { - List orders = consultationDao.getOrders(patient, visitType, visitStartDate); + public Map> getEncounterOrdersMap(Visit visit) { + List orders = consultationDao.getOrders(visit); return getEncounterListMapForOrders(orders); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java index 6237c7a7..6094fc06 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OPConsultService.java @@ -1,4 +1,5 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.api.dao.HipVisitDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.bahmni.module.hip.web.model.OPConsultBundle; import org.bahmni.module.hip.web.model.DateRange; @@ -9,6 +10,7 @@ import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,31 +28,35 @@ public class OPConsultService { private final PatientService patientService; private final OpenMRSDrugOrderClient openMRSDrugOrderClient; private final ConsultationService consultationService; + private final HipVisitDao hipVisitDao; + @Autowired public OPConsultService(FhirBundledOPConsultBuilder fhirBundledOPConsultBuilder, OPConsultDao opConsultDao, PatientService patientService, OpenMRSDrugOrderClient openMRSDrugOrderClient, - ConsultationService consultationService) { + ConsultationService consultationService, HipVisitDao hipVisitDao) { this.fhirBundledOPConsultBuilder = fhirBundledOPConsultBuilder; this.opConsultDao = opConsultDao; this.patientService = patientService; this.openMRSDrugOrderClient = openMRSDrugOrderClient; this.consultationService = consultationService; + this.hipVisitDao = hipVisitDao; } public List getOpConsultsForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); + Visit visit = hipVisitDao.getPatientVisit(patient,visitType,visitStartDate); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, visitType, visitStartDate)); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(visit)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, patient); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, patient); + Map> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(visit); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap( visit); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(visit); + Map encounterProcedureMap = getEncounterProcedureMap(visit); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visit); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visit); List openMrsOPConsultList = OpenMrsOPConsult.getOpenMrsOPConsultList(encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounteredDrugOrdersMap, encounterProcedureMap, @@ -82,8 +88,8 @@ public List getOpConsultsForProgram(String patientUuid, DateRan map(fhirBundledOPConsultBuilder::fhirBundleResponseFor).collect(Collectors.toList()); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate) { - List obsProcedures = opConsultDao.getProcedures(patient, visitType,visitStartDate); + private Map getEncounterProcedureMap(Visit visit) { + List obsProcedures = opConsultDao.getProcedures(visit); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); From a3b561ce9632011fb3ef3eb0be9608f59a69c268 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 18 May 2022 16:22:34 +0530 Subject: [PATCH 175/264] BAH-1628 | Refactor. discharge summary and diagnostic report to use visit object --- .../hip/api/dao/DischargeSummaryDao.java | 6 ++-- .../api/dao/impl/DischargeSummaryDaoImpl.java | 35 ++++++------------- .../web/service/DiagnosticReportService.java | 24 +++++++------ .../web/service/DischargeSummaryService.java | 31 +++++++++------- 4 files changed, 47 insertions(+), 49 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java index f1e26d31..a017abea 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DischargeSummaryDao.java @@ -2,12 +2,14 @@ import org.openmrs.Obs; import org.openmrs.Patient; +import org.openmrs.Visit; + import java.util.Date; import java.util.List; public interface DischargeSummaryDao { - List getCarePlan(Patient patient, String visit, Date visitStartDate); - List getProcedures(Patient patient, String visit, Date visitStartDate); + List getCarePlan(Visit visit); + List getProcedures(Visit visit); List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index 196748bb..15a61735 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -1,10 +1,12 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.DischargeSummaryDao; +import org.bahmni.module.hip.api.dao.EncounterDao; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; import org.openmrs.PatientProgram; +import org.openmrs.Visit; import org.openmrs.api.ObsService; import org.openmrs.api.ProgramWorkflowService; import org.openmrs.module.episodes.Episode; @@ -28,25 +30,20 @@ public class DischargeSummaryDaoImpl implements DischargeSummaryDao { private final ObsService obsService; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; + private final EncounterDao encounterDao; @Autowired - public DischargeSummaryDaoImpl(ObsService obsService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService) { + public DischargeSummaryDaoImpl(ObsService obsService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService, EncounterDao encounterDao) { this.obsService = obsService; this.programWorkflowService = programWorkflowService; this.episodeService = episodeService; - } - - private boolean matchesVisitType(String visitType, Obs obs) { - return obs.getEncounter().getVisit().getVisitType().getName().equals(visitType); + this.encounterDao = encounterDao; } @Override - public List getCarePlan(Patient patient, String visit, Date visitStartDate) { + public List getCarePlan(Visit visit) { final String obsName = "Discharge Summary"; - List patientObs = obsService.getObservationsByPerson(patient); - List carePlanObs = patientObs.stream().filter(obs -> matchesVisitType(visit, obs)) - .filter(obs -> obs.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime()) - .filter(obs -> obsName.equals(obs.getConcept().getName().getName())) + List carePlanObs = encounterDao.GetAllObsForVisit(visit, CONSULTATION, obsName).stream() .filter(obs -> obs.getConcept().getName().getLocalePreferred()) .collect(Collectors.toList()); @@ -75,20 +72,10 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t } @Override - public List getProcedures(Patient patient, String visit, Date visitStartDate) { - List patientObs = obsService.getObservationsByPerson(patient); - List proceduresObsMap = new ArrayList<>(); - for(Obs o :patientObs){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && o.getEncounter().getVisit().getStartDatetime().getTime() == visitStartDate.getTime() - && Objects.equals(o.getEncounter().getVisit().getVisitType().getName(), visit) - && o.getObsGroup() == null - && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) - ) - { - proceduresObsMap.add(o); - } - } + public List getProcedures(Visit visit) { + List proceduresObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION, PROCEDURE_NOTES).stream() + .filter(obs -> obs.getObsGroup() == null) + .collect(Collectors.toList()); return proceduresObsMap; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index fcefbe99..3d3189c7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -39,6 +39,9 @@ public class DiagnosticReportService { private HipVisitDao hipVisitDao; private OrderDao orderDao; private final String ORDER_TYPE = "Order"; + private static final String RADIOLOGY_TYPE = "RADIOLOGY"; + private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; + private static final String DOCUMENT_TYPE = "Document"; private LabOrderResultsService labOrderResultsService; @@ -64,7 +67,8 @@ public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDia public List getDiagnosticReportsForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); - HashMap> encounterListMap = getAllObservationsForVisits(patient, visitType,visitStartDate); + Visit visit = hipVisitDao.getPatientVisit(patient,visitType,visitStartDate); + HashMap> encounterListMap = getAllObservationsForVisits(visit); List openMrsDiagnosticReports = OpenMrsDiagnosticReport.fromDiagnosticReport(encounterListMap); return openMrsDiagnosticReports @@ -73,18 +77,18 @@ public List getDiagnosticReportsForVisit(String patientU .collect(Collectors.toList()); } - public HashMap> getAllObservationsForVisits(Patient patient, - String visitType, Date visitStartDate) { + public HashMap> getAllObservationsForVisits(Visit visit) { + List patientObs = encounterDao.GetAllObsForVisit(visit, RADIOLOGY_TYPE, DOCUMENT_TYPE); + patientObs.addAll(encounterDao.GetAllObsForVisit(visit, PATIENT_DOCUMENT_TYPE, DOCUMENT_TYPE)); HashMap> encounterListMap = new HashMap<>(); - List encounterIds = encounterDao.GetEncounterIdsForVisitForDiagnosticReport(patient.getUuid(), visitType, visitStartDate); - List finalList = new ArrayList<>(); - for(Integer encounterId : encounterIds){ - finalList.add(encounterService.getEncounter(encounterId)); - } - for (Encounter e : finalList) { - encounterListMap.put(e, new ArrayList<>(e.getAllObs())); + for (Obs obs: patientObs) { + Encounter encounter = obs.getEncounter(); + if(!encounterListMap.containsKey(encounter)) + encounterListMap.put(encounter, new ArrayList(){{ add(obs); }}); + encounterListMap.get(encounter).add(obs); } return encounterListMap; + } public List getDiagnosticReportsForProgram(String patientUuid, DateRange dateRange, String programName, String programEnrollmentId) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java index a8933c9c..7f311d97 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DischargeSummaryService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.hip.api.dao.DischargeSummaryDao; +import org.bahmni.module.hip.api.dao.HipVisitDao; import org.bahmni.module.hip.web.model.OpenMrsCondition; import org.bahmni.module.hip.web.model.DateRange; import org.bahmni.module.hip.web.model.DischargeSummaryBundle; @@ -10,6 +11,7 @@ import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; +import org.openmrs.Visit; import org.openmrs.api.PatientService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -30,27 +32,30 @@ public class DischargeSummaryService { private final FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder; private final OpenMRSDrugOrderClient openMRSDrugOrderClient; private final ConsultationService consultationService; + private final HipVisitDao hipVisitDao; @Autowired - public DischargeSummaryService(PatientService patientService, DischargeSummaryDao dischargeSummaryDao, FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder, OpenMRSDrugOrderClient openMRSDrugOrderClient, ConsultationService consultationService) { + public DischargeSummaryService(PatientService patientService, DischargeSummaryDao dischargeSummaryDao, FhirBundledDischargeSummaryBuilder fhirBundledDischargeSummaryBuilder, OpenMRSDrugOrderClient openMRSDrugOrderClient, ConsultationService consultationService, HipVisitDao hipVisitDao) { this.patientService = patientService; this.dischargeSummaryDao = dischargeSummaryDao; this.fhirBundledDischargeSummaryBuilder = fhirBundledDischargeSummaryBuilder; this.openMRSDrugOrderClient = openMRSDrugOrderClient; this.consultationService = consultationService; + this.hipVisitDao = hipVisitDao; } public List getDischargeSummaryForVisit(String patientUuid, String visitType, Date visitStartDate) { Patient patient = patientService.getPatientByUuid(patientUuid); - DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(patientUuid, visitType,visitStartDate)); + Visit visit = hipVisitDao.getPatientVisit(patient,visitType,visitStartDate); + DrugOrders drugOrders = new DrugOrders(openMRSDrugOrderClient.getDrugOrdersByDateAndVisitTypeFor(visit)); Map encounteredDrugOrdersMap = drugOrders.groupByEncounter(); - Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(patient, visitType, visitStartDate); - ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(patient, visitType, visitStartDate); - Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap(patient, visitType, visitStartDate); - Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(patient, visitType, visitStartDate); - Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visitType, visitStartDate, patient); - Map encounterProcedureMap = getEncounterProcedureMap(patient, visitType, visitStartDate); - Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visitType, visitStartDate, patient); + Map> encounterDischargeSummaryMap = getEncounterCarePlanMap(visit); + ConcurrentHashMap> encounterChiefComplaintsMap = consultationService.getEncounterChiefComplaintsMap(visit); + Map> encounterMedicalHistoryMap = consultationService.getEncounterMedicalHistoryConditionsMap( visit); + Map> encounterPhysicalExaminationMap = consultationService.getEncounterPhysicalExaminationMap(visit); + Map> encounterPatientDocumentsMap = consultationService.getEncounterPatientDocumentsMap(visit); + Map encounterProcedureMap = getEncounterProcedureMap(visit); + Map> encounterOrdersMap = consultationService.getEncounterOrdersMap(visit); List openMrsDischargeSummaryList = OpenMrsDischargeSummary.getOpenMrsDischargeSummaryList(encounterDischargeSummaryMap, encounteredDrugOrdersMap, encounterChiefComplaintsMap, encounterMedicalHistoryMap, encounterPhysicalExaminationMap, encounterPatientDocumentsMap, encounterProcedureMap, encounterOrdersMap, patient); return openMrsDischargeSummaryList.stream().map(fhirBundledDischargeSummaryBuilder::fhirBundleResponseFor).collect(Collectors.toList()); @@ -74,8 +79,8 @@ public List getDischargeSummaryForProgram(String patient } - private Map> getEncounterCarePlanMap(Patient patient, String visitType, Date visitStartDate) { - List carePlanObs = dischargeSummaryDao.getCarePlan(patient, visitType,visitStartDate); + private Map> getEncounterCarePlanMap(Visit visit) { + List carePlanObs = dischargeSummaryDao.getCarePlan(visit); return getEncounterListMapForCarePlan(carePlanObs); } @@ -96,8 +101,8 @@ private Map> getEncounterCarePlanMapForProgram(String progr return getEncounterListMapForCarePlan(carePlanObs); } - private Map getEncounterProcedureMap(Patient patient, String visitType, Date visitStartDate) { - List obsProcedures = dischargeSummaryDao.getProcedures(patient, visitType, visitStartDate); + private Map getEncounterProcedureMap(Visit visit) { + List obsProcedures = dischargeSummaryDao.getProcedures(visit); Map encounterProcedureMap = new HashMap<>(); for(Obs o: obsProcedures){ encounterProcedureMap.put(o.getEncounter(), o); From ec8606169a351c37b4379aac1471edb70135352a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 19 May 2022 18:19:58 +0530 Subject: [PATCH 176/264] BAH-1628 | Refactor. extrated date comparision in controllers into method in DateUtil --- .../module/hip/web/controller/DiagnosticReportController.java | 3 ++- .../module/hip/web/controller/DischargeSummaryController.java | 3 ++- .../bahmni/module/hip/web/controller/OPConsultController.java | 3 ++- .../module/hip/web/controller/PrescriptionController.java | 3 ++- .../main/java/org/bahmni/module/hip/web/utils/DateUtils.java | 4 ++++ 5 files changed, 12 insertions(+), 4 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java index 3b398fe5..f4b0bf54 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; +import static org.bahmni.module.hip.web.utils.DateUtils.isDateBetweenDateRange; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @@ -58,7 +59,7 @@ ResponseEntity getDiagnosticReportsForVisit(@RequestParam String patientId, return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List diagnosticReportBundle = new ArrayList<>(); - if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) { + if(isDateBetweenDateRange(visitStartDate,fromDate,toDate)) { diagnosticReportBundle = diagnosticReportService.getDiagnosticReportsForVisit(patientId, visitType, parseDateTime(visitStartDate)); diagnosticReportBundle.addAll(diagnosticReportService.getLabResultsForVisits(patientId, visitType, parseDateTime(visitStartDate))); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java index f8445459..1a9c4291 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.List; +import static org.bahmni.module.hip.web.utils.DateUtils.isDateBetweenDateRange; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @@ -60,7 +61,7 @@ ResponseEntity getDischargeSummaryForVisit(@RequestParam String patientId, return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List dischargeSummaryBundle = new ArrayList<>(); - if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) { + if(isDateBetweenDateRange(visitStartDate,fromDate,toDate)) { dischargeSummaryBundle = dischargeSummaryService.getDischargeSummaryForVisit(patientId, visitType, parseDateTime(visitStartDate)); } return ResponseEntity.ok() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java index 62aea039..84bd2f55 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; +import static org.bahmni.module.hip.web.utils.DateUtils.isDateBetweenDateRange; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @@ -53,7 +54,7 @@ ResponseEntity getOpconsultForVisit(@RequestParam String patientId, if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List opConsultBundle = new ArrayList<>(); - if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) + if(isDateBetweenDateRange(visitStartDate,fromDate,toDate)) opConsultBundle = opConsultService.getOpConsultsForVisit(patientId,visitType,parseDateTime(visitStartDate)); return ResponseEntity.ok() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index 7fa45122..e556bfd8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; +import static org.bahmni.module.hip.web.utils.DateUtils.isDateBetweenDateRange; import static org.bahmni.module.hip.web.utils.DateUtils.parseDate; import static org.bahmni.module.hip.web.utils.DateUtils.parseDateTime; @@ -55,7 +56,7 @@ ResponseEntity getPrescriptionForVisit( if (!validationService.isValidPatient(patientId)) return ResponseEntity.badRequest().body(ClientError.invalidPatientId()); List prescriptionBundle = new ArrayList<>(); - if(parseDate(visitStartDate).compareTo(parseDate(fromDate)) >= 0 && parseDate(visitStartDate).compareTo(parseDate(toDate)) < 0) + if(isDateBetweenDateRange(visitStartDate,fromDate,toDate)) prescriptionBundle = prescriptionService.getPrescriptions(patientId, visitType, parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java index 268f0fac..da7b9967 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/utils/DateUtils.java @@ -14,4 +14,8 @@ public static Date parseDateTime(String date) throws ParseException { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return dateFormat.parse(date); } + + public static boolean isDateBetweenDateRange(String date, String fromDate, String toDate) throws ParseException { + return parseDate(date).compareTo(parseDate(fromDate)) >= 0 && parseDate(date).compareTo(parseDate(toDate)) < 0; + } } From 5096bb38c9af0af00e244c5d573ad1aaa4e5d013 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 19 May 2022 18:56:15 +0530 Subject: [PATCH 177/264] BAH-1628 | Refactor. care-context query to use api service instead of sql --- .../hip/api/dao/CareContextRepository.java | 3 +- .../dao/impl/CareContextRepositoryImpl.java | 215 ++++++++---------- .../hip/web/service/CareContextService.java | 6 +- 3 files changed, 106 insertions(+), 118 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java index 07ddbac5..48a81dc9 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/CareContextRepository.java @@ -1,12 +1,13 @@ package org.bahmni.module.hip.api.dao; import org.bahmni.module.hip.model.PatientCareContext; +import org.openmrs.Patient; import java.util.List; public interface CareContextRepository { List getPatientCareContext(String patientUuid); - List getNewPatientCareContext(Integer patientId); + List getNewPatientCareContext(Patient patient); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index bf79a4c1..b884776b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -1,141 +1,128 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.CareContextRepository; +import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.model.PatientCareContext; import org.hibernate.Query; import org.hibernate.SessionFactory; -import org.hibernate.transform.Transformers; -import org.hibernate.type.IntegerType; -import org.hibernate.type.StringType; +import org.openmrs.Encounter; +import org.openmrs.Patient; +import org.openmrs.PatientProgram; +import org.openmrs.Visit; +import org.openmrs.api.PatientService; +import org.openmrs.api.ProgramWorkflowService; +import org.openmrs.api.VisitService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; @Repository public class CareContextRepositoryImpl implements CareContextRepository { private SessionFactory sessionFactory; + private PatientService patientService; + private VisitService visitService; + private ProgramWorkflowService programWorkflowService; + private EncounterDao encounterDao; + @Autowired - public CareContextRepositoryImpl(SessionFactory sessionFactory) { + public CareContextRepositoryImpl(SessionFactory sessionFactory, PatientService patientService, VisitService visitService, ProgramWorkflowService programWorkflowService, EncounterDao encounterDao) { this.sessionFactory = sessionFactory; + this.patientService = patientService; + this.visitService = visitService; + this.programWorkflowService = programWorkflowService; + this.encounterDao = encounterDao; } @Override public List getPatientCareContext(String patientUuid) { - Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT\n" + - " case\n" + - " when care_context = 'PROGRAM' then value_reference\n" + - " else provider_name end as careContextReference,\n" + - " care_context as careContextType,\n" + - " case when care_context = 'PROGRAM' then program_name\n" + - " else\n" + - " concat (visit_type_name,\" / \",visit_startDate)\n" + - " end as careContextName\n" + - "from\n" + - " (\n" + - " select\n" + - " ppa.value_reference,p3.uuid,e.patient_id, p2.program_id, vt.visit_type_id , vt.name ,\n" + - " v.date_started As visit_startDate,\n" + - " concat(pn.given_name, ifnull(concat(' ',pn.middle_name),'')," + - " ifnull(concat(' ',pn.family_name_prefix),''), ifnull(concat(' ',pn.family_name),''), " + - " ifnull(concat(' ',pn.family_name2),''), ifnull(concat(' ',pn.family_name_suffix),'')) as provider_name,\n" + - " pp.patient_program_id , p2.name as program_name, vt.name as visit_type_name,\n" + - " case\n" + - " when p2.program_id is null then 'VISIT_TYPE'\n" + - " else 'PROGRAM'\n" + - " end as care_context\n" + - " from\n" + - " encounter e\n" + - " left join episode_encounter ee on\n" + - " e.encounter_id = ee.encounter_id\n" + - " left join episode_patient_program epp on\n" + - " ee.episode_id = epp.episode_id\n" + - " left join patient_program pp on\n" + - " epp.patient_program_id = pp.patient_program_id\n" + - " left join program p2 on\n" + - " pp.program_id = p2.program_id\n" + - " left join visit v on\n" + - " v.visit_id = e.visit_id\n" + - " and v.patient_id = e.patient_id\n" + - " left join visit_type vt on\n" + - " v.visit_type_id = vt.visit_type_id\n" + - " left join users u on e.creator = u.user_id\n" + - " left join person_name pn ON pn.person_id = u.person_id\n" + - " left join person p3 on\n" + - " \te.patient_id = p3.person_id\n" + - " left join patient_program_attribute ppa on\n" + - " \tpp.patient_program_id=ppa.patient_program_id) as a\n" + - "where\n" + - " a.uuid = :patientUuid\n" + - " group by \n" + - "visit_startDate, \n" + - "case when care_context = 'PROGRAM' \n" + - "then patient_program_id else visit_type_id \n" + - "end") - .addScalar("careContextReference", StringType.INSTANCE) - .addScalar("careContextType", StringType.INSTANCE) - .addScalar("careContextName", StringType.INSTANCE); - query.setParameter("patientUuid", patientUuid); - return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); + List careContexts = new ArrayList<>(); + Patient patient = patientService.getPatientByUuid(patientUuid); + List visits = getAllVisitForPatient(patient); + List patientPrograms = getAllPrograms(patient); + for (Visit visit: visits) { + careContexts.add(getPatientCareContext(visit)); + } + for (PatientProgram program: patientPrograms) { + careContexts.add(getPatientCareContext(program)); + } + return careContexts; } - public List getNewPatientCareContext(Integer patientId) { + + @Override + public List getNewPatientCareContext(Patient patient) { + List careContexts = new ArrayList<>(); + List visits = getAllVisitForPatient(patient); + List patientPrograms = getAllPrograms(patient); + Visit visit = !visits.isEmpty() ? visits.get(0) : null; + PatientProgram program = !patientPrograms.isEmpty() ? patientPrograms.get(0) : null; + if(visit == null && program != null) + getPatientCareContext(program); + else if(visit != null && program == null) + getPatientCareContext(visit); + else if(visit != null && program != null) { + if (program.getDateCreated().before(visit.getStartDatetime())) + careContexts.add(getPatientCareContext(visit)); + else + careContexts.add(getPatientCareContext(program)); + } + return careContexts; + } + + private PatientCareContext getPatientCareContext(Visit visit) { + return new PatientCareContext("VISIT_TYPE", + visit.getVisitType().getName().concat(" / ").concat(visit.getStartDatetime().toString()), + visit.getCreator().getPersonName().getFullName()); + } + + private PatientCareContext getPatientCareContext(PatientProgram program) { + return new PatientCareContext("PROGRAM", + program.getProgram().getName(), + getProgramEnrollementId(program.getPatientProgramId()).get(0)); + } + + private List getEpisodeIds() { Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select\n" + - " care_context_type as careContextType,\n" + - " case when care_context_type = 'PROGRAM' then program_name\n" + - " else\n" + - " concat (visit_type_name,\" / \",visit_startDate)\n" + - " end as careContextName,\n" + - " case when care_context = 'PROGRAM' then value_reference\n" + - " else\n" + - " provider_name end as careContextReference,\n" + - "from\n" + - " (\n" + - " select\n" + - " ppa.value_reference,\n" + - " p3.uuid,\n" + - " e.patient_id,\n" + - " p2.program_id,\n" + - " vt.visit_type_id,\n" + - " v.date_started As visit_startDate,\n" + - " concat(pn.given_name, ifnull(concat(' ',pn.middle_name),'')," + - " ifnull(concat(' ',pn.family_name_prefix),''), ifnull(concat(' ',pn.family_name),''), " + - " ifnull(concat(' ',pn.family_name2),''), ifnull(concat(' ',pn.family_name_suffix),'')) as provider_name,\n" + - " vt.name,\n" + - " pp.patient_program_id,\n" + - " p2.name as program_name,\n" + - " vt.name as visit_type_name,\n" + - " case when p2.program_id is null then 'VISIT_TYPE' else 'PROGRAM' end as care_context_type\n" + - " from\n" + - " encounter as e\n" + - " left join episode_encounter ee on e.encounter_id = ee.encounter_id\n" + - " left join episode_patient_program epp on ee.episode_id = epp.episode_id\n" + - " left join patient_program pp on epp.patient_program_id = pp.patient_program_id\n" + - " left join program p2 on pp.program_id = p2.program_id\n" + - " left join visit v on v.visit_id = e.visit_id\n" + - " and v.patient_id = e.patient_id\n" + - " left join visit_type vt on v.visit_type_id = vt.visit_type_id\n" + - " left join person p3 on e.patient_id = p3.person_id\n" + - " left join patient_program_attribute ppa on pp.patient_program_id = ppa.patient_program_id\n" + - " left join users u on e.creator = u.user_id\n" + - " left join person_name pn ON pn.person_id = u.person_id\n" + - " where\n" + - " v.visit_id = (\n" + - " select\n" + - " max(visit_id)\n" + - " from\n" + - " visit\n" + - " where\n" + - " patient_id = :patientId\n" + - " )\n" + - " ) as a\n" + - "group by\n" + - " visit_startDate;\n").addScalar("careContextReference", StringType.INSTANCE) - .addScalar("careContextType", StringType.INSTANCE) - .addScalar("careContextName", StringType.INSTANCE); - query.setParameter("patientId", patientId); - return query.setResultTransformer(Transformers.aliasToBean(PatientCareContext.class)).list(); + "\t\tepisode_id\n" + + "\tfrom\n" + + "\t\tepisode_encounter\n"); + return query.list(); + } + + private List getProgramEnrollementId(Integer patientProgramId) { + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("SELECT\n" + + " value_reference FROM patient_program_attribute WHERE patient_program_id = :patientProgramId\n"); + query.setParameter("patientProgramId", patientProgramId); + return query.list(); + } + + private List getAllVisitForPatient(Patient patient){ + List visits = new ArrayList<>(); + for (Visit visit: visitService.getVisitsByPatient(patient)) { + Set encounters = visit.getEncounters().stream() + .filter(encounter -> !encounterDao.GetEpisodeEncounterIds().contains(encounter.getEncounterId())) + .collect(Collectors.toSet()); + if(!encounters.isEmpty()) + visits.add(visit); + } + return visits; + } + + private List getAllPrograms(Patient patient){ + List programs = new ArrayList<>(); + List episodeIds = getEpisodeIds(); + Set patientPrograms = new HashSet<>(programWorkflowService.getPatientPrograms(patient, null, null, null, null, null, false)); + for (PatientProgram program: patientPrograms) { + if(episodeIds.contains(program.getId())) + programs.add(program); + } + return programs; } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java index 96de1dcd..9fbe657b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/CareContextService.java @@ -50,11 +50,11 @@ public NewCareContext newCareContextsForPatient(String patientUuid) { return new NewCareContext(patient.getGivenName() + (patient.getMiddleName() == null ? " " : patient.getMiddleName()) + patient.getFamilyName(), existingPatientDao.getPatientHealthIdWithPatientId(patient.getId()), patient.getPatientIdentifier("Patient Identifier").getIdentifier(), - getCareContexts(patient.getId())); + getCareContexts(patient)); } - private List getCareContexts(Integer patientId) { - List patientCareContexts = careContextRepository.getNewPatientCareContext(patientId); + private List getCareContexts(Patient patient) { + List patientCareContexts = careContextRepository.getNewPatientCareContext(patient); if (patientCareContexts.size() > 1) { List result = new ArrayList<>(); for (PatientCareContext careContext : patientCareContexts) { From 78d4e9237f7c6f2fc2e003ede78871f20466f197 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 20 May 2022 15:37:13 +0530 Subject: [PATCH 178/264] BAH-1628 | Refactor. extracted string to constants and removed unused imports --- .../bahmni/module/hip/api/dao/Constants.java | 20 +++++++++++++++++++ .../dao/impl/CareContextRepositoryImpl.java | 7 +++++-- .../hip/api/dao/impl/ConsultationDaoImpl.java | 18 +++++++++-------- .../api/dao/impl/DischargeSummaryDaoImpl.java | 12 +++++------ .../hip/api/dao/impl/EncounterDaoImpl.java | 18 ++++++++++++----- .../hip/api/dao/impl/OPConsultDaoImpl.java | 7 ++++--- .../dao/impl/PrescriptionOrderDaoImpl.java | 2 -- 7 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java new file mode 100644 index 00000000..337418aa --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java @@ -0,0 +1,20 @@ +package org.bahmni.module.hip.api.dao; + +public class Constants { + + public static final String VISIT_TYPE = "VISIT_TYPE"; + public static final String PROGRAM = "PROGRAM"; + + public static final String RADIOLOGY_ORDER = "Radiology Order"; + public static final String LAB_ORDER = "Lab Order"; + public static final String ORDER_ACTION = "DISCONTINUE"; + + public static final String CONSULTATION = "Consultation"; + public static final String CHIEF_COMPLAINT = "Chief Complaint"; + public static final String PROCEDURE_NOTES = "Procedure Notes"; + public static final String DISCHARGE_SUMMARY = "Discharge Summary"; + public static final String RADIOLOGY_TYPE = "RADIOLOGY"; + public static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; + public static final String DOCUMENT_TYPE = "Document"; + public static final String CODED_DIAGNOSIS = "Coded Diagnosis"; +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index b884776b..9420c8fa 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -21,6 +21,9 @@ import java.util.Set; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.PROGRAM; +import static org.bahmni.module.hip.api.dao.Constants.VISIT_TYPE; + @Repository public class CareContextRepositoryImpl implements CareContextRepository { private SessionFactory sessionFactory; @@ -76,13 +79,13 @@ else if(visit != null && program != null) { } private PatientCareContext getPatientCareContext(Visit visit) { - return new PatientCareContext("VISIT_TYPE", + return new PatientCareContext(VISIT_TYPE, visit.getVisitType().getName().concat(" / ").concat(visit.getStartDatetime().toString()), visit.getCreator().getPersonName().getFullName()); } private PatientCareContext getPatientCareContext(PatientProgram program) { - return new PatientCareContext("PROGRAM", + return new PatientCareContext(PROGRAM, program.getProgram().getName(), getProgramEnrollementId(program.getPatientProgramId()).get(0)); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 110e961b..d5fd76ea 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -25,22 +25,24 @@ import java.util.Set; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.CHIEF_COMPLAINT; +import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; +import static org.bahmni.module.hip.api.dao.Constants.LAB_ORDER; +import static org.bahmni.module.hip.api.dao.Constants.ORDER_ACTION; +import static org.bahmni.module.hip.api.dao.Constants.RADIOLOGY_ORDER; + @Repository public class ConsultationDaoImpl implements ConsultationDao { - public static final String RADIOLOGY_ORDER = "Radiology Order"; - public static final String OPD = "OPD"; - private final ObsService obsService; - private final OrderService orderService; - public static final String CONSULTATION = "Consultation"; - public static final String CHIEF_COMPLAINT = "Chief Complaint"; - public static final String ORDER_ACTION = "DISCONTINUE"; + public static final ArrayList ORDER_TYPES = new ArrayList() {{ - add("Lab Order"); + add(LAB_ORDER); add(RADIOLOGY_ORDER); }}; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; private final EncounterDao encounterDao; + private final ObsService obsService; + private final OrderService orderService; @Autowired public ConsultationDaoImpl(ObsService obsService, OrderService orderService, ProgramWorkflowService programWorkflowService, EpisodeService episodeService, EncounterDao encounterDao) { diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index 15a61735..26b84de7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -22,11 +22,13 @@ import java.util.Set; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; +import static org.bahmni.module.hip.api.dao.Constants.DISCHARGE_SUMMARY; +import static org.bahmni.module.hip.api.dao.Constants.PROCEDURE_NOTES; + @Repository public class DischargeSummaryDaoImpl implements DischargeSummaryDao { - public static final String CONSULTATION = "Consultation"; - public static final String PROCEDURE_NOTES = "Procedure Notes"; private final ObsService obsService; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; @@ -42,8 +44,7 @@ public DischargeSummaryDaoImpl(ObsService obsService, ProgramWorkflowService pro @Override public List getCarePlan(Visit visit) { - final String obsName = "Discharge Summary"; - List carePlanObs = encounterDao.GetAllObsForVisit(visit, CONSULTATION, obsName).stream() + List carePlanObs = encounterDao.GetAllObsForVisit(visit, CONSULTATION, DISCHARGE_SUMMARY).stream() .filter(obs -> obs.getConcept().getName().getLocalePreferred()) .collect(Collectors.toList()); @@ -52,7 +53,6 @@ public List getCarePlan(Visit visit) { @Override public List getCarePlanForProgram(String programName, Date fromDate, Date toDate, Patient patient) { - final String obsName = "Discharge Summary"; List patientPrograms = programWorkflowService.getPatientPrograms(patient,programWorkflowService.getProgramByName(programName), fromDate, toDate,null,null,false); Set patientProgramSet = new HashSet<>(patientPrograms); List carePlanObs= new ArrayList<>(); @@ -61,7 +61,7 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t Set encounterSet = episode.getEncounters(); for (Encounter encounter : encounterSet) { for (Obs o : encounter.getAllObs()) { - if (obsName.equals(o.getConcept().getName().getName()) + if (DISCHARGE_SUMMARY.equals(o.getConcept().getName().getName()) && o.getConcept().getName().getLocalePreferred()) { carePlanObs.add(o); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index 0b77a56a..751339a1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -3,19 +3,27 @@ import org.bahmni.module.hip.api.dao.EncounterDao; import org.hibernate.Query; import org.hibernate.SessionFactory; -import org.openmrs.*; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Order; +import org.openmrs.Visit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.DOCUMENT_TYPE; +import static org.bahmni.module.hip.api.dao.Constants.PATIENT_DOCUMENT_TYPE; +import static org.bahmni.module.hip.api.dao.Constants.RADIOLOGY_TYPE; + + @Repository public class EncounterDaoImpl implements EncounterDao { - private static final String RADIOLOGY_TYPE = "RADIOLOGY"; - private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; - private static final String DOCUMENT_TYPE = "Document"; private SessionFactory sessionFactory; @Autowired diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 532ce403..a569de8d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -26,11 +26,12 @@ import java.util.Set; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.CODED_DIAGNOSIS; +import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; +import static org.bahmni.module.hip.api.dao.Constants.PROCEDURE_NOTES; + @Repository public class OPConsultDaoImpl implements OPConsultDao { - public static final String PROCEDURE_NOTES = "Procedure Notes, Procedure"; - public static final String CONSULTATION = "Consultation"; - private static final String CODED_DIAGNOSIS = "Coded Diagnosis"; private final ObsService obsService; private final ConditionService conditionService; diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java index 4f6dab92..81e3cf16 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/PrescriptionOrderDaoImpl.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.api.dao.impl; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.PrescriptionOrderDao; import org.hibernate.Criteria; From 224563a261a641d72ff52cd477b648fb9b774620 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 31 May 2022 16:00:45 +0530 Subject: [PATCH 179/264] BAH-1849 | Fix. To handle phoneNumber undefined case in fetching matched existing patient record Co-authored-by: Kavitha S --- .../bahmni/module/hip/web/service/ExistingPatientService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index e9e8e463..bb206075 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -111,7 +111,9 @@ private void removeHealthId(Patient patient,PatientIdentifier patientIdentifierP } public List getMatchingPatients(String phoneNumber) { - return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH)); + if(!phoneNumber.equals("undefined")) + return existingPatientDao.getPatientsWithPhoneNumber(phoneNumber.substring(phoneNumber.length() - PHONE_NUMBER_LENGTH)); + return new ArrayList<>(); } public List getMatchingPatients(String patientName, int patientYearOfBirth, String patientGender) { From 09f1d14439ec6b3f5fdee7c962a9c0217946acb0 Mon Sep 17 00:00:00 2001 From: swatigogia2020 <73937345+swatigogia2020@users.noreply.github.com> Date: Fri, 10 Jun 2022 14:55:27 +0530 Subject: [PATCH 180/264] =?UTF-8?q?=20Making=20liquibase=20change=20to=20t?= =?UTF-8?q?ake=20care=20of=20null=20value=20in=20global=20propert=E2=80=A6?= =?UTF-8?q?=20(#66)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Making liquibase change to take care of null value in global property and added trigger * Updating liquibase to insert ABHA and ABHA address --- .github/workflows/build_and_upload.yml | 21 +++++++ api/src/main/resources/liquibase.xml | 84 ++++++-------------------- 2 files changed, 38 insertions(+), 67 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index af975030..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -35,3 +35,24 @@ jobs: with: name: Package path: staging + + trigger-dependent-repos: + name: Trigger Workflows + needs: build + runs-on: ubuntu-latest + strategy: + matrix: + dependent-repos: [ 'bahmni-india-package' ] + steps: + - name: Create repository_dispatch + env: + REPOSITORY_NAME: ${{ matrix.dependent-repos }} + run: | + trigger_result=$(curl -s -o trigger_response.txt -w "%{http_code}" -X POST -H "Accept: application/vnd.github.v3+json" -H 'authorization: Bearer ${{ secrets.BAHMNI_PAT }}' https://api.github.com/repos/${ORG_NAME}/${REPOSITORY_NAME}/dispatches -d '{"event_type":"'"${EVENT_TYPE}"'"}') + if [ $trigger_result == 204 ];then + echo "Trigger to $ORG_NAME/$REPOSITORY_NAME Success" + else + echo "Trigger to $ORG_NAME/$REPOSITORY_NAME Failed" + cat trigger_response.txt + exit 1 + fi diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 560af949..6aedc873 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -5,74 +5,44 @@ xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> - - - - + + - select count(*) from patient_identifier_type where name='Health ID' + select count(*) from patient_identifier_type where name='ABHA' - Adding Health Id Identifier type + Adding ABHA Identifier type - insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'Health ID','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; + insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'ABHA','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; - + - select count(*) from patient_identifier_type where name='Health ID' + select count(*) from patient_identifier_type where name='ABHA' - Adding Health Id Identifier type + Updating global property for ABHA identifier - update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'Health ID') where property = 'bahmni.extraPatientIdentifierTypes'; + update global_property set property_value=(SELECT CONCAT(COALESCE(property_value,''),',',uuid) from patient_identifier_type where name = 'ABHA') where property = 'bahmni.extraPatientIdentifierTypes'; - + - select count(*) from patient_identifier_type where name='PHR Address' + select count(*) from patient_identifier_type where name='ABHA Address' - Adding PHR Address Identifier type + Adding ABHA Address Identifier type - insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'PHR Address','PHR Address identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; + insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'ABHA Address','PHR Address identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; - + - select count(*) from patient_identifier_type where name='PHR Address' + select count(*) from patient_identifier_type where name='ABHA Address' - Adding PHR Address Identifier type + Updating global property for ABHA address - update global_property set property_value=(SELECT CONCAT(property_value,',',uuid) from patient_identifier_type where name = 'PHR Address') where property = 'bahmni.extraPatientIdentifierTypes'; + update global_property set property_value=(SELECT CONCAT(COALESCE(property_value,''),',',uuid) from patient_identifier_type where name = 'ABHA Address') where property = 'bahmni.extraPatientIdentifierTypes'; @@ -88,24 +58,4 @@ - - - select count(*) from patient_identifier_type where name='Health ID' - - Updating Health Id Identifier type to ABHA - - update patient_identifier_type set name ='ABHA' where name= 'Health ID'; - - - - - - select count(*) from patient_identifier_type where name='PHR Address' - - Adding PHR Address Identifier type - - update patient_identifier_type set name ='ABHA Address' where name= 'PHR Address'; - - - From 488d570859a88272126e96fef9e16cef3ac1b58c Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 10 Jun 2022 15:29:08 +0530 Subject: [PATCH 181/264] Update. required fhir2 version as 1.3 --- omod/pom.xml | 2 +- omod/src/main/resources/config.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 1f37efda..b1dd68a2 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -55,7 +55,7 @@ org.openmrs.module fhir2-omod - 1.0.0-20200925.143534-163 + 1.3.0 provided diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index a15552ba..af5ec00c 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,7 +22,7 @@ org.openmrs.module.webservices.rest - org.openmrs.module.fhir2 + org.openmrs.module.fhir2 org.openmrs.module.emrapi org.bahmni.module.bahmnicore From f5f8e3b96485e911cbbb7780a1b06f78fb1b3933 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 14 Jun 2022 11:15:35 +0530 Subject: [PATCH 182/264] BAH-1871 | Fix. To load hip omod with fhir2 upgraded version Co-authored-by: Kavitha S Co-authored-by: swatigogia2020 --- .../resources/webModuleApplicationContext.xml | 2 +- pom.xml | 21 +++++++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index 0e1be591..3f3da611 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -27,7 +27,7 @@ - + diff --git a/pom.xml b/pom.xml index 2b89ed5e..609d74d8 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ omod - 2.0.4 + 2.1.7 1.8 1.8 UTF-8 @@ -61,16 +61,29 @@ - + + org.openmrs.module + fhir2-api-2.1 + 1.3.0 + provided + + + org.openmrs.module + fhir2-api + 1.3.0 + provided + org.openmrs.module emrapi-api - 1.32.0 + 1.24.8 + provided org.openmrs.module emrapi-omod - 1.32.0 + 1.24.8 + provided org.openmrs.api From bc2b7be4be412a311c157db342be0dfaa977e9e9 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 14 Jun 2022 12:20:31 +0530 Subject: [PATCH 183/264] BAH-1871 | Test_Fix. downgraded openmrs version to fix test failure Co-authored-by: Kavitha S --- omod/src/main/resources/webModuleApplicationContext.xml | 1 - pom.xml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index 3f3da611..931efed2 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -27,7 +27,6 @@ - diff --git a/pom.xml b/pom.xml index 609d74d8..5f82ed16 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ omod - 2.1.7 + 2.1.1 1.8 1.8 UTF-8 From 3505c6e00136d4d8a0cb769827907757dbb7015a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 14 Jun 2022 17:20:06 +0530 Subject: [PATCH 184/264] BAH-1871 | Upgraded. openmrs version to 2.1.7 Co-authored-by: Kavitha S Co-authored-by: swatigogia2020 --- omod/pom.xml | 6 ++++++ pom.xml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/omod/pom.xml b/omod/pom.xml index b1dd68a2..01d5bf5d 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -103,6 +103,12 @@ 2.3.0 test + + com.fasterxml.jackson.core + jackson-core + 2.10.1 + test + diff --git a/pom.xml b/pom.xml index 5f82ed16..609d74d8 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ omod - 2.1.1 + 2.1.7 1.8 1.8 UTF-8 From dfebdb60f3ed9a3a41b961ede2ad3c5da6121c3a Mon Sep 17 00:00:00 2001 From: SanoferSameera <79590907+SanoferSameera@users.noreply.github.com> Date: Wed, 15 Jun 2022 14:27:01 +0530 Subject: [PATCH 185/264] Bug Fix. getting new careContext as empty (#65) Co-authored-by: Kavitha S Co-authored-by: Kavitha S --- .../module/hip/api/dao/impl/CareContextRepositoryImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java index 9420c8fa..6ab6255b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/CareContextRepositoryImpl.java @@ -66,9 +66,9 @@ public List getNewPatientCareContext(Patient patient) { Visit visit = !visits.isEmpty() ? visits.get(0) : null; PatientProgram program = !patientPrograms.isEmpty() ? patientPrograms.get(0) : null; if(visit == null && program != null) - getPatientCareContext(program); + careContexts.add(getPatientCareContext(program)); else if(visit != null && program == null) - getPatientCareContext(visit); + careContexts.add(getPatientCareContext(visit)); else if(visit != null && program != null) { if (program.getDateCreated().before(visit.getStartDatetime())) careContexts.add(getPatientCareContext(visit)); From 0ef0d176f31ea64384503b0f392bec2362a8d183 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 15 Jun 2022 15:45:21 +0530 Subject: [PATCH 186/264] BAH-1871 | Upgraded. fhir2 omod version to 1.4.0 Co-authored-by: Kavitha S Co-authored-by: swatigogia2020 --- omod/pom.xml | 2 +- omod/src/main/resources/config.xml | 2 +- pom.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 01d5bf5d..8923d7c8 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -55,7 +55,7 @@ org.openmrs.module fhir2-omod - 1.3.0 + 1.4.0-SNAPSHOT provided diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index af5ec00c..918f369d 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,7 +22,7 @@ org.openmrs.module.webservices.rest - org.openmrs.module.fhir2 + org.openmrs.module.fhir2 org.openmrs.module.emrapi org.bahmni.module.bahmnicore diff --git a/pom.xml b/pom.xml index 609d74d8..e737957c 100644 --- a/pom.xml +++ b/pom.xml @@ -64,13 +64,13 @@ org.openmrs.module fhir2-api-2.1 - 1.3.0 + 1.4.0-SNAPSHOT provided org.openmrs.module fhir2-api - 1.3.0 + 1.4.0-SNAPSHOT provided From d9f30c7b99311f63f7fee9e56d914926aa40d1d9 Mon Sep 17 00:00:00 2001 From: swatigogia2020 <73937345+swatigogia2020@users.noreply.github.com> Date: Thu, 16 Jun 2022 16:46:09 +0530 Subject: [PATCH 187/264] Updating liquibase to update username admin (#68) --- api/src/main/resources/liquibase.xml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 6aedc873..aa4ade49 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -4,7 +4,20 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-2.0.xsd"> - + + + + + SELECT COUNT(*) FROM users where username = 'admin' + + + Populate username for admin user + + + system_id='admin' + + + From c5c60745b485af4f67193742354b3937653b13dd Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 23 Jun 2022 18:24:48 +0530 Subject: [PATCH 188/264] BAH-1676 | Refactor. removed ABHA number Co-authored-by: Kavitha S --- api/src/main/resources/liquibase.xml | 16 +++++++------- .../module/hip/web/service/Constants.java | 1 - .../web/service/ExistingPatientService.java | 21 +++++++------------ 3 files changed, 16 insertions(+), 22 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index aa4ade49..71aeda95 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -18,24 +18,24 @@ - - + - select count(*) from patient_identifier_type where name='ABHA' + select count(*) from patient_identifier_type where name='ABHA' - Adding ABHA Identifier type + Removing ABHA identifier from global property - insert into patient_identifier_type( name, description,creator, uuid, uniqueness_behavior, location_behavior, date_created) Select 'ABHA','Health Id identifier type',creator,uuid(),'UNIQUE','NOT_USED',now() from users where username='admin'; + update global_property set property_value=replace(property_value,concat((SELECT uuid from patient_identifier_type where name='ABHA'),","),"") where property = 'bahmni.extraPatientIdentifierTypes'; - + select count(*) from patient_identifier_type where name='ABHA' - Updating global property for ABHA identifier + Removing ABHA Identifier type - update global_property set property_value=(SELECT CONCAT(COALESCE(property_value,''),',',uuid) from patient_identifier_type where name = 'ABHA') where property = 'bahmni.extraPatientIdentifierTypes'; + delete from patient_identifier where identifier_type=(select patient_identifier_type_id from patient_identifier_type where name='ABHA'); + delete from patient_identifier_type where name='ABHA'; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index be9c2edc..76a8120c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -37,6 +37,5 @@ public class Constants { public static final String RADIOLOGY_REPORT = "Radiology Report"; public static final String PATIENT_DOCUMENT = "Patient Document"; - public static final String ABHA = "ABHA"; public static final String ABHA_ADDRESS = "ABHA Address"; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index bb206075..4fa0bf50 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -19,7 +19,6 @@ import java.util.List; import java.util.Set; -import static org.bahmni.module.hip.web.service.Constants.ABHA; import static org.bahmni.module.hip.web.service.Constants.ABHA_ADDRESS; @Service @@ -52,7 +51,7 @@ public Set getMatchingPatients(String phoneNumber, String patientName, public String getHealthId(Patient patient) { String healthId = ""; try { - healthId = patient.getPatientIdentifier(ABHA).getIdentifier(); + healthId = patient.getPatientIdentifier(ABHA_ADDRESS).getIdentifier(); } catch (NullPointerException ignored) { } @@ -62,23 +61,21 @@ public String getHealthId(Patient patient) { public void perform(String healthId, String action) { Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(ABHA_ADDRESS); - PatientIdentifier patientIdentifierHealthId = patient.getPatientIdentifier(ABHA); if (action.equals(Status.DELETED.toString())) { - removeHealthId(patient,patientIdentifierPhr,patientIdentifierHealthId); + removeHealthId(patient,patientIdentifierPhr); } if (action.equals(Status.DEACTIVATED.toString())) { - voidHealthId(patientIdentifierPhr,patientIdentifierHealthId); + voidHealthId(patientIdentifierPhr); } if (action.equals(Status.REACTIVATED.toString())) { unVoidHealthId(patient,healthId); } } - private void voidHealthId(PatientIdentifier patientIdentifierPHR,PatientIdentifier patientIdentifierHealthId) { + private void voidHealthId(PatientIdentifier patientIdentifierPHR) { try { - if (!patientIdentifierPHR.getVoided() && !patientIdentifierHealthId.getVoided()) { + if (!patientIdentifierPHR.getVoided()) { patientService.voidPatientIdentifier(patientIdentifierPHR, Status.DEACTIVATED.toString()); - patientService.voidPatientIdentifier(patientIdentifierHealthId, Status.DEACTIVATED.toString()); } } catch (NullPointerException ignored) { } @@ -88,7 +85,7 @@ private void unVoidHealthId(Patient patient, String phrAddress) { Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier : patientIdentifiers) { - if (patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS) || patientIdentifier.getIdentifierType().getName().equals(ABHA)) { + if (patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)) { if(patientIdentifier.getVoided()){ patientIdentifier.setVoided(false); patientService.savePatientIdentifier(patientIdentifier); @@ -99,10 +96,8 @@ private void unVoidHealthId(Patient patient, String phrAddress) { } } - private void removeHealthId(Patient patient,PatientIdentifier patientIdentifierPHR,PatientIdentifier patientIdentifierHealthId) { + private void removeHealthId(Patient patient,PatientIdentifier patientIdentifierPHR) { try { - if (patientIdentifierHealthId != null) - patient.removeIdentifier(patientIdentifierHealthId); if(patientIdentifierPHR != null) patient.removeIdentifier(patientIdentifierPHR); patientService.savePatient(patient); @@ -218,7 +213,7 @@ public boolean isHealthIdVoided(String uuid){ Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier:patientIdentifiers) { - if(patientIdentifier.getIdentifierType().getName().equals(ABHA) || patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)){ + if(patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)){ return patientIdentifier.getVoided(); } } From c43f7cf11d6142805efbbff17f90251f65512470 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 24 Jun 2022 16:17:06 +0530 Subject: [PATCH 189/264] BAH-1676 | updated workflow Co-authored-by: Kavitha S --- .github/workflows/build_and_upload.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index a64ef6aa..151168be 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,6 +7,7 @@ on: push: branches: - master + - BAH-1676 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro From e5ea67d2a49259c094daabecf6df9269a8628107 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 27 Jun 2022 19:00:40 +0530 Subject: [PATCH 190/264] BAH-1849 | Passing patient dateOfBirth in ABDM matched Bahmni patient records --- .../java/org/bahmni/module/hip/web/model/ExistingPatient.java | 2 +- .../bahmni/module/hip/web/service/ExistingPatientService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java index c9e53640..a1fc4261 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/ExistingPatient.java @@ -11,7 +11,7 @@ @AllArgsConstructor public class ExistingPatient { String name; - String yearOfBirth; + String dateOfBirth; String address; String gender; String uuid; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index bb206075..0e9c2158 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -179,7 +179,7 @@ public List getMatchingPatientDetails(Set matchingPati existingPatients.add( new ExistingPatient( patient.getGivenName() + " " + patient.getMiddleName() + " " + patient.getFamilyName(), - getYearOfBirth(patient.getBirthdate()).toString(), + patient.getBirthdate().toString(), getAddress(patient), patient.getGender(), patient.getUuid(), From bee4e5d7ebf0fd1192618d65d0e0f1098d99fc2a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 1 Jul 2022 15:47:22 +0530 Subject: [PATCH 191/264] Updated wokflow --- .github/workflows/build_and_upload.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index 151168be..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,7 +7,6 @@ on: push: branches: - master - - BAH-1676 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro From 15a3fe48e0ad36832da259488ebc4a25bd429ecd Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Mon, 4 Jul 2022 12:56:57 +0530 Subject: [PATCH 192/264] BAH-1953 | fixed. updated primaryContact to phoneNumber Co-authored-by: SanoferSameera --- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 2 +- .../bahmni/module/hip/web/service/ExistingPatientService.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index d5f28d0e..9b149eba 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -46,7 +46,7 @@ public String getPhoneNumber(Integer patientId) { String getPatientPhoneNumberWithPatientIdQuery = " SELECT value FROM person_attribute INNER JOIN person_attribute_type ON" + " person_attribute.person_attribute_type_id = person_attribute_type.person_attribute_type_id " + - "where person_id = :patientId and name = \"primaryContact\";"; + "where person_id = :patientId and name = \"phoneNumber\";"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientPhoneNumberWithPatientIdQuery); query.setParameter("patientId", patientId); List phoneNumbers = query.list(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 20e8f035..56436855 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -29,7 +29,7 @@ public class ExistingPatientService { private final PatientService patientService; private final LocationService locationService; private static final String REGISTRATION_DESK = "Registration Desk"; - private static final String PRIMARY_CONTACT = "primaryContact"; + private static final String PHONE_NUMBER = "phoneNumber"; static final int PHONE_NUMBER_LENGTH = 10; @Autowired @@ -188,7 +188,7 @@ public List getMatchingPatientDetails(Set matchingPati private String getPhoneNumber(Patient patient) { String phoneNumber = " "; try { - phoneNumber = patient.getAttribute(PRIMARY_CONTACT).getValue(); + phoneNumber = patient.getAttribute(PHONE_NUMBER).getValue(); } catch (NullPointerException ignored) { } From 503fbd15a7c173b74ef0b63147ff6a88e435f4de Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 7 Jul 2022 16:43:25 +0530 Subject: [PATCH 193/264] BAH-1681 | Upgraded openmrs 2.1.1 to 2.4.2 --- omod/src/main/resources/webModuleApplicationContext.xml | 7 ++++--- pom.xml | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index 931efed2..99281999 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -24,10 +24,11 @@ - + - - + + + diff --git a/pom.xml b/pom.xml index e737957c..072d828d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,11 +17,11 @@ omod - 2.1.7 + 2.4.2 1.8 1.8 UTF-8 - 2.1.1 + 2.4.2 5.0.0 From 06ca86c5ec2f9d25d9224dccda1c5de78339475b Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Tue, 12 Jul 2022 18:34:42 +0530 Subject: [PATCH 194/264] updated health id as abha address in getting patients Co-authored-by: SanoferSameera --- .../module/hip/api/dao/impl/ExistingPatientDaoImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index 9b149eba..f5134488 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -15,6 +15,7 @@ public class ExistingPatientDaoImpl implements ExistingPatientDao { private final SessionFactory sessionFactory; + public static final String ABHA_ADDRESS = "ABHA Address"; @Autowired public ExistingPatientDaoImpl(SessionFactory sessionFactory) { @@ -63,9 +64,10 @@ public String getPatientHealthIdWithPatientId(Integer patientId) { "\tpi.identifier_type = piy.patient_identifier_type_id\n" + "where\n" + "\tpi.patient_id = :patientId\n" + - "\tand piy.name = 'Health ID';"; + "\tand piy.name = :healthId ;"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientHealthId); query.setParameter("patientId", patientId); + query.setParameter("healthId", ABHA_ADDRESS); List healthIds = query.list(); return healthIds.size() > 0 ? healthIds.get(0) : null; } From 54bc227e403e1eedfe7df05d781b4a9c577b82c9 Mon Sep 17 00:00:00 2001 From: kavitha-sundararajan <90255023+kavitha-sundararajan@users.noreply.github.com> Date: Wed, 13 Jul 2022 17:20:18 +0530 Subject: [PATCH 195/264] BAH-1998 | added changesets to update global property for atomfeed (#72) Co-authored-by: SanoferSameera Co-authored-by: SanoferSameera --- api/src/main/resources/liquibase.xml | 40 ++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 71aeda95..73dd251d 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -71,4 +71,44 @@ + + + select count(*) from global_property where property='abdm.encounterTypesToBeIgnored' + + Adding global property for encounter types to be ignored + + insert into global_property(property,description,property_value,uuid) values('abdm.encounterTypesToBeIgnored','Encounter types to be ignored for hip atomfeeds','',uuid()); + + + + + + select count(*) from global_property where property='abdm.encounterTypesToBeIgnored' + + Adding global property for encounter types to be ignored + + insert into global_property(property,description,property_value,uuid) values('abdm.encounterTypesToBeIgnored','Encounter types to be ignored for hip atomfeeds','ADMISSION,REG,TRANSFER,VALIDATION NOTES',uuid()); + + + + + + select count(*) from global_property where property='abdm.formFieldsToBeIgnored' + + Adding global property for form fields to be ignored + + insert into global_property(property,description,property_value,uuid) values('abdm.formFieldsToBeIgnored','Form fields to be ignored for hip atomfeeds','',uuid()); + + + + + + select count(*) from global_property where property='abdm.conceptsTypesToBeIgnored' + + Adding global property for concept types to be ignored + + insert into global_property(property,description,property_value,uuid) values('abdm.conceptsTypesToBeIgnored','Concept types to be ignored for hip atomfeeds','',uuid()); + + + From 5aa921ed58ae7ed426c0f22a8044149c78e06aeb Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 14 Jul 2022 13:13:19 +0530 Subject: [PATCH 196/264] BAH-1998 | removed duplicate change set Co-authored-by: Kavitha S --- api/src/main/resources/liquibase.xml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index 73dd251d..a8043163 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -71,16 +71,6 @@ - - - select count(*) from global_property where property='abdm.encounterTypesToBeIgnored' - - Adding global property for encounter types to be ignored - - insert into global_property(property,description,property_value,uuid) values('abdm.encounterTypesToBeIgnored','Encounter types to be ignored for hip atomfeeds','',uuid()); - - - select count(*) from global_property where property='abdm.encounterTypesToBeIgnored' From e4bd3ecdcf95c930d3a7806e73f8f8ab179df434 Mon Sep 17 00:00:00 2001 From: binduak Date: Sun, 10 Jul 2022 21:00:25 +0530 Subject: [PATCH 197/264] Bindu | Upgrade to 2.4.2 OMRS version --- api/pom.xml | 4 +- omod/pom.xml | 39 ++++++++--- .../web/controller/HipControllerAdvice.java | 22 +++--- .../hip/web/service/PrescriptionService.java | 5 +- .../resources/webModuleApplicationContext.xml | 69 +++++++++---------- .../resources/TestingApplicationContext.xml | 13 ++-- pom.xml | 9 ++- 7 files changed, 93 insertions(+), 68 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index 57494827..8e16024a 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -16,7 +16,7 @@ org.openmrs.api openmrs-api - 2.1.1 + 2.4.2 provided @@ -38,7 +38,7 @@ org.openmrs.module episodes-api - 1.0-SNAPSHOT + 1.0.1-SNAPSHOT compile diff --git a/omod/pom.xml b/omod/pom.xml index 8923d7c8..c581d5df 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -28,12 +28,24 @@ - + + org.openmrs.api + openmrs-api + ${openMRSVersion} + jar + provided + + + javax.servlet + servlet-api + + + org.openmrs.module episodes-api - 1.0-SNAPSHOT + 1.0.1-SNAPSHOT provided @@ -62,7 +74,7 @@ org.bahmni.module bahmnicore-api - 0.92-SNAPSHOT + 0.94.1-SNAPSHOT provided @@ -91,12 +103,6 @@ - - org.springframework.boot - spring-boot-starter-test - 1.2.1.RELEASE - test - javax.xml.bind jaxb-api @@ -109,6 +115,13 @@ 2.10.1 test + + + + + + + @@ -118,7 +131,13 @@ org.springframework.boot spring-boot-starter-test - 1.2.1.RELEASE + 2.1.10.RELEASE + + + org.springframework.boot + spring-boot-starter-logging + + test diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java index ed4236c9..317d0bca 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/HipControllerAdvice.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.controller; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.web.exception.RequestParameterMissingException; import org.bahmni.module.hip.web.model.ErrorResponse; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; @@ -12,7 +13,8 @@ @ControllerAdvice public class HipControllerAdvice extends BaseRestController { - private static final Logger log = Logger.getLogger(HipControllerAdvice.class); + + private static Logger logger = LogManager.getLogger(HipControllerAdvice.class); @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(RequestParameterMissingException.class) @@ -28,19 +30,19 @@ public String illegalArgumentException(Exception ex) { return ex.getMessage(); } - @ResponseBody - @ResponseStatus(HttpStatus.BAD_REQUEST) - @ExceptionHandler(Exception.class) - public ErrorResponse genericException(Exception ex) { - log.error(ex.getMessage(), ex); - return new ErrorResponse(ex.getMessage()); - } +// @ResponseBody +// @ResponseStatus(HttpStatus.BAD_REQUEST) +// @ExceptionHandler(Exception.class) +// public ErrorResponse genericException(Exception ex) { +// logger.error(ex.getMessage(), ex); +// return new ErrorResponse(ex.getMessage()); +// } @ResponseBody @ResponseStatus(HttpStatus.BAD_REQUEST) @ExceptionHandler(NumberFormatException.class) public ErrorResponse numberFormatException(Exception ex) { - log.error(ex.getMessage(), ex); + logger.error(ex.getMessage(), ex); return new ErrorResponse(ex.getMessage()); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java index ee6386d9..e268f76f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/PrescriptionService.java @@ -1,7 +1,8 @@ package org.bahmni.module.hip.web.service; -import org.apache.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.api.dao.HipVisitDao; import org.bahmni.module.hip.web.model.PrescriptionBundle; import org.bahmni.module.hip.web.model.DateRange; @@ -20,7 +21,7 @@ @Service public class PrescriptionService { - private static final Logger log = Logger.getLogger(PrescriptionService.class); + private static Logger logger = LogManager.getLogger(PrescriptionService.class); private final OpenMRSDrugOrderClient openMRSDrugOrderClient; private final FhirBundledPrescriptionBuilder fhirBundledPrescriptionBuilder; diff --git a/omod/src/main/resources/webModuleApplicationContext.xml b/omod/src/main/resources/webModuleApplicationContext.xml index 99281999..cd5a9aec 100644 --- a/omod/src/main/resources/webModuleApplicationContext.xml +++ b/omod/src/main/resources/webModuleApplicationContext.xml @@ -1,35 +1,34 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/omod/src/test/resources/TestingApplicationContext.xml b/omod/src/test/resources/TestingApplicationContext.xml index 1f2fce1d..1193ed47 100644 --- a/omod/src/test/resources/TestingApplicationContext.xml +++ b/omod/src/test/resources/TestingApplicationContext.xml @@ -2,16 +2,16 @@ - - @@ -23,6 +23,11 @@ + + + org.openmrs + + diff --git a/pom.xml b/pom.xml index 072d828d..cecfbf92 100644 --- a/pom.xml +++ b/pom.xml @@ -76,13 +76,13 @@ org.openmrs.module emrapi-api - 1.24.8 + 1.32.0 provided org.openmrs.module emrapi-omod - 1.24.8 + 1.32.0 provided @@ -115,16 +115,15 @@ org.openmrs.module webservices.rest-omod - 2.12 + 2.29.0 provided org.openmrs.module webservices.rest-omod-common - 2.12 + 2.29.0 provided - From 2fe8195a47640ebe5b6d392a655aea8d92fdf0d4 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Jul 2022 15:25:03 +0530 Subject: [PATCH 198/264] BAH-1681 | Updated episode and bahmnicore version in pom --- api/pom.xml | 2 +- omod/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/pom.xml b/api/pom.xml index 8e16024a..f1fe6327 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -38,7 +38,7 @@ org.openmrs.module episodes-api - 1.0.1-SNAPSHOT + 1.0-SNAPSHOT compile diff --git a/omod/pom.xml b/omod/pom.xml index c581d5df..8562016f 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -45,7 +45,7 @@ org.openmrs.module episodes-api - 1.0.1-SNAPSHOT + 1.0-SNAPSHOT provided @@ -74,7 +74,7 @@ org.bahmni.module bahmnicore-api - 0.94.1-SNAPSHOT + 0.94-SNAPSHOT provided From 5db892042ed7a66c9fe94a53ec9e314438774f8c Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Jul 2022 15:44:57 +0530 Subject: [PATCH 199/264] BAH-1681 | Refactor. to retrieve conditions --- .../hip/api/dao/impl/OPConsultDaoImpl.java | 88 ++++++++++++++++--- 1 file changed, 77 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index a569de8d..4707a29f 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -1,6 +1,8 @@ package org.bahmni.module.hip.api.dao.impl; import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.OPConsultDao; +import org.openmrs.Concept; +import org.openmrs.ConditionClinicalStatus; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Patient; @@ -9,13 +11,15 @@ import org.openmrs.api.EncounterService; import org.openmrs.api.ObsService; import org.openmrs.api.ProgramWorkflowService; +import org.openmrs.api.context.Context; import org.openmrs.module.emrapi.conditionslist.Condition; -import org.openmrs.module.emrapi.conditionslist.ConditionService; import org.openmrs.module.episodes.Episode; import org.openmrs.module.episodes.service.EpisodeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; +import org.openmrs.api.ConditionService; + import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -51,19 +55,26 @@ public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService this.encounterDao = encounterDao; } + @Override public Map> getMedicalHistoryConditions(Visit visit) { final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; List encounters = encounterDao.GetEncountersForVisit(visit, CONSULTATION); - List conditions = conditionService.getActiveConditions(visit.getPatient()) + List conditions = conditionService.getActiveConditions(visit.getPatient()) .stream() - .filter(condition -> condition.getStatus().name().equals(conditionStatusActive) || - condition.getStatus().name().equals(conditionStatusHistoryOf)) + .filter(condition -> condition.getClinicalStatus().name().equals(conditionStatusActive) || + condition.getClinicalStatus().name().equals(conditionStatusHistoryOf)) + .collect(Collectors.toList()); - Map> encounterConditionsMap = new HashMap<>(); + List emrapiconditions = new ArrayList<>(); + for(org.openmrs.Condition condition : conditions){ + org.openmrs.module.emrapi.conditionslist.Condition emrapicondition = convertCoreConditionToEmrapiCondition(condition); + emrapiconditions.add(emrapicondition); + } - for(Condition condition : conditions){ + Map> encounterConditionsMap = new HashMap<>(); + for(Condition condition : emrapiconditions){ for(Encounter encounter : encounters){ Date nextEncounterDate; if(encounters.indexOf(encounter) != 0){ @@ -139,15 +150,21 @@ public Map> getMedicalHistoryConditionsForProgram(Str .stream() .filter(encounter -> Objects.equals(encounter.getEncounterType().getName(), "Consultation")) .collect(Collectors.toList()); - Set conditions = conditionService.getActiveConditions(patient) + List conditions = conditionService.getActiveConditions(patient) .stream() - .filter(condition -> condition.getStatus().name().equals(conditionStatusActive) || - condition.getStatus().name().equals(conditionStatusHistoryOf)) - .collect(Collectors.toSet()); + .filter(condition -> condition.getClinicalStatus().name().equals(conditionStatusActive) || + condition.getClinicalStatus().name().equals(conditionStatusHistoryOf)) + .collect(Collectors.toList()); + + List emrapiconditions = new ArrayList<>(); + for(org.openmrs.Condition condition : conditions){ + org.openmrs.module.emrapi.conditionslist.Condition emrapicondition = convertCoreConditionToEmrapiCondition(condition); + emrapiconditions.add(emrapicondition); + } Map> encounterConditionsMap = new HashMap<>(); - for(Condition condition : conditions){ + for(Condition condition : emrapiconditions){ for(Encounter encounter : encounters){ Encounter nextEncounter; Date nextEncounterDate = new Date(); @@ -191,4 +208,53 @@ public List getMedicalHistoryDiagnosisForProgram(String programName, Date f } return obsSet; } + + + private org.openmrs.module.emrapi.conditionslist.Condition convertCoreConditionToEmrapiCondition(org.openmrs.Condition coreCondition) { + org.openmrs.module.emrapi.conditionslist.Condition cListCondition = new org.openmrs.module.emrapi.conditionslist.Condition(); + Concept concept; + + if (coreCondition.getCondition().getCoded() != null) { + concept = Context.getConceptService() + .getConceptByUuid(coreCondition.getCondition().getCoded().getUuid()); + + if(coreCondition.getCondition().getSpecificName() == null) { + coreCondition.getCondition().setSpecificName(coreCondition.getCondition().getCoded().getName(Context.getLocale())); + } + } else { + concept = new Concept(); + } + + cListCondition.setUuid(coreCondition.getUuid()); + cListCondition.setConcept(concept); + cListCondition.setAdditionalDetail(coreCondition.getAdditionalDetail()); + cListCondition.setPatient(coreCondition.getPatient()); + cListCondition.setConditionNonCoded(coreCondition.getCondition().getNonCoded()); + cListCondition.setOnsetDate(coreCondition.getOnsetDate()); + cListCondition.setVoided(coreCondition.getVoided()); + cListCondition.setVoidReason(coreCondition.getVoidReason()); + cListCondition.setEndDate(coreCondition.getEndDate()); + cListCondition.setCreator(coreCondition.getCreator()); + cListCondition.setDateCreated(coreCondition.getDateCreated()); + cListCondition.setStatus(convertClinicalStatus(coreCondition.getClinicalStatus())); + if (coreCondition.getPreviousVersion() != null) { + cListCondition.setPreviousCondition(convertCoreConditionToEmrapiCondition(coreCondition.getPreviousVersion())); + } + + return cListCondition; + } + + private Condition.Status convertClinicalStatus(ConditionClinicalStatus clinicalStatus) { + Condition.Status convertedStatus = Condition.Status.ACTIVE; + + if (clinicalStatus == ConditionClinicalStatus.ACTIVE) { + convertedStatus = Condition.Status.ACTIVE; + } else if (clinicalStatus == ConditionClinicalStatus.INACTIVE) { + convertedStatus = Condition.Status.INACTIVE; + } else if (clinicalStatus == ConditionClinicalStatus.HISTORY_OF) { + convertedStatus = Condition.Status.HISTORY_OF; + } + + return convertedStatus; + } } From 453075689a62626b0202aa12e2e6bd5f4fc6d63f Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Jul 2022 16:16:52 +0530 Subject: [PATCH 200/264] BAH-1681 | Refactor. to retrieve bundle for all the Hi-types in correct format --- .../web/controller/DiagnosticReportController.java | 11 +++++++---- .../web/controller/DischargeSummaryController.java | 11 +++++++---- .../hip/web/controller/OPConsultController.java | 12 ++++++++---- .../hip/web/controller/PrescriptionController.java | 11 +++++++---- 4 files changed, 29 insertions(+), 16 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java index f4b0bf54..dac59373 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DiagnosticReportController.java @@ -6,6 +6,7 @@ import org.bahmni.module.hip.web.model.DiagnosticReportBundle; import org.bahmni.module.hip.web.service.DiagnosticReportService; import org.bahmni.module.hip.web.service.ValidationService; +import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; @@ -33,6 +35,7 @@ public class DiagnosticReportController extends BaseRestController { private final DiagnosticReportService diagnosticReportService; private final ValidationService validationService; + private final ObjectMapper mapper = new ObjectMapper(); @Autowired public DiagnosticReportController(DiagnosticReportService diagnosticReportService, ValidationService validationService) { @@ -46,7 +49,7 @@ ResponseEntity getDiagnosticReportsForVisit(@RequestParam String patientId, @RequestParam String visitType, @RequestParam String visitStartDate, @RequestParam String fromDate, - @RequestParam String toDate) throws ParseException { + @RequestParam String toDate) throws ParseException, IOException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) @@ -66,7 +69,7 @@ ResponseEntity getDiagnosticReportsForVisit(@RequestParam String patientId, } return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledDiagnosticReportResponse(diagnosticReportBundle)); + .body(mapper.writeValueAsString(new BundledDiagnosticReportResponse(diagnosticReportBundle))); } @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) @@ -77,7 +80,7 @@ ResponseEntity getDiagnosticReportsForProgram( @RequestParam String toDate, @RequestParam String programName, @RequestParam String programEnrollmentId - ) throws ParseException, UnsupportedEncodingException { + ) throws ParseException, IOException { programName = URLDecoder.decode(programName, "UTF-8"); if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); @@ -97,6 +100,6 @@ ResponseEntity getDiagnosticReportsForProgram( return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledDiagnosticReportResponse(diagnosticReportBundles)); + .body(mapper.writeValueAsString(new BundledDiagnosticReportResponse(diagnosticReportBundles))); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java index 1a9c4291..846f6fb2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/DischargeSummaryController.java @@ -6,6 +6,7 @@ import org.bahmni.module.hip.web.model.DischargeSummaryBundle; import org.bahmni.module.hip.web.service.DischargeSummaryService; import org.bahmni.module.hip.web.service.ValidationService; +import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RequestParam; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; @@ -34,6 +36,7 @@ public class DischargeSummaryController extends BaseRestController { private final ValidationService validationService; private final DischargeSummaryService dischargeSummaryService; + private final ObjectMapper mapper = new ObjectMapper(); @Autowired public DischargeSummaryController(ValidationService validationService, DischargeSummaryService dischargeSummaryService) { @@ -47,7 +50,7 @@ ResponseEntity getDischargeSummaryForVisit(@RequestParam String patientId, @RequestParam String visitType, @RequestParam String visitStartDate, @RequestParam String fromDate, - @RequestParam String toDate) throws ParseException { + @RequestParam String toDate) throws ParseException, IOException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); @@ -66,7 +69,7 @@ ResponseEntity getDischargeSummaryForVisit(@RequestParam String patientId, } return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); + .body(mapper.writeValueAsString(new BundledDischargeSummaryResponse(dischargeSummaryBundle))); } @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) @@ -77,7 +80,7 @@ ResponseEntity getDischargeSummaryForProgram( @RequestParam String toDate, @RequestParam String programName, @RequestParam String programEnrollmentId - ) throws ParseException, UnsupportedEncodingException { + ) throws ParseException, IOException { programName = URLDecoder.decode(programName, "UTF-8"); if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); @@ -91,7 +94,7 @@ ResponseEntity getDischargeSummaryForProgram( dischargeSummaryService.getDischargeSummaryForProgram(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), programName, programEnrollmentId); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledDischargeSummaryResponse(dischargeSummaryBundle)); + .body(mapper.writeValueAsString(new BundledDischargeSummaryResponse(dischargeSummaryBundle))); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java index 84bd2f55..269e8635 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/OPConsultController.java @@ -6,6 +6,7 @@ import org.bahmni.module.hip.web.model.OPConsultBundle; import org.bahmni.module.hip.web.service.OPConsultService; import org.bahmni.module.hip.web.service.ValidationService; +import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +15,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; @@ -29,6 +31,7 @@ public class OPConsultController extends BaseRestController { private final OPConsultService opConsultService; private final ValidationService validationService; + private final ObjectMapper mapper = new ObjectMapper(); @Autowired public OPConsultController(OPConsultService opConsultService, ValidationService validationService) { @@ -42,7 +45,7 @@ ResponseEntity getOpconsultForVisit(@RequestParam String patientId, @RequestParam String visitType, @RequestParam String visitStartDate, @RequestParam String fromDate, - @RequestParam String toDate) throws ParseException { + @RequestParam String toDate) throws ParseException, IOException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) @@ -57,9 +60,10 @@ ResponseEntity getOpconsultForVisit(@RequestParam String patientId, if(isDateBetweenDateRange(visitStartDate,fromDate,toDate)) opConsultBundle = opConsultService.getOpConsultsForVisit(patientId,visitType,parseDateTime(visitStartDate)); + return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledOPConsultResponse(opConsultBundle)); + .body(mapper.writeValueAsString(new BundledOPConsultResponse(opConsultBundle))); } @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) @@ -70,7 +74,7 @@ ResponseEntity getOpConsultForProgram( @RequestParam String toDate, @RequestParam String programName, @RequestParam String programEnrollmentId) - throws ParseException , UnsupportedEncodingException { + throws ParseException, IOException { programName = URLDecoder.decode(programName, "UTF-8"); if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); @@ -85,6 +89,6 @@ ResponseEntity getOpConsultForProgram( return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledOPConsultResponse(opConsultBundle)); + .body(mapper.writeValueAsString(new BundledOPConsultResponse(opConsultBundle))); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java index e556bfd8..5baf6224 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/controller/PrescriptionController.java @@ -6,6 +6,7 @@ import org.bahmni.module.hip.web.model.PrescriptionBundle; import org.bahmni.module.hip.web.service.PrescriptionService; import org.bahmni.module.hip.web.service.ValidationService; +import org.codehaus.jackson.map.ObjectMapper; import org.openmrs.module.webservices.rest.web.RestConstants; import org.openmrs.module.webservices.rest.web.v1_0.controller.BaseRestController; import org.springframework.beans.factory.annotation.Autowired; @@ -14,6 +15,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.text.ParseException; @@ -29,6 +31,7 @@ public class PrescriptionController extends BaseRestController { private final PrescriptionService prescriptionService; private final ValidationService validationService; + private final ObjectMapper mapper = new ObjectMapper(); @Autowired public PrescriptionController(PrescriptionService prescriptionService, ValidationService validationService) { @@ -44,7 +47,7 @@ ResponseEntity getPrescriptionForVisit( @RequestParam String toDate, @RequestParam String visitType, @RequestParam String visitStartDate - ) throws ParseException { + ) throws ParseException, IOException { if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); if (visitType == null || visitType.isEmpty()) @@ -60,7 +63,7 @@ ResponseEntity getPrescriptionForVisit( prescriptionBundle = prescriptionService.getPrescriptions(patientId, visitType, parseDateTime(visitStartDate)); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledPrescriptionResponse(prescriptionBundle)); + .body(mapper.writeValueAsString(new BundledPrescriptionResponse(prescriptionBundle))); } @RequestMapping(method = RequestMethod.GET, value = "/program", produces = MediaType.APPLICATION_JSON_VALUE) @@ -71,7 +74,7 @@ ResponseEntity getPrescriptionForProgram( @RequestParam String toDate, @RequestParam String programName, @RequestParam String programEnrollmentId - ) throws ParseException, UnsupportedEncodingException { + ) throws ParseException, IOException { programName = URLDecoder.decode(programName, "UTF-8"); if (patientId == null || patientId.isEmpty()) return ResponseEntity.badRequest().body(ClientError.noPatientIdProvided()); @@ -85,6 +88,6 @@ ResponseEntity getPrescriptionForProgram( prescriptionService.getPrescriptionsForProgram(patientId, new DateRange(parseDate(fromDate), parseDate(toDate)), programName, programEnrollmentId); return ResponseEntity.ok() .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE) - .body(new BundledPrescriptionResponse(prescriptionBundle)); + .body(mapper.writeValueAsString(new BundledPrescriptionResponse(prescriptionBundle))); } } From 9bdd5a6aef0c0ba42f1274afc8f844cd616002a8 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 25 Jul 2022 17:31:10 +0530 Subject: [PATCH 201/264] BAH-1681 | temp fix. updated repository url for bahmni snapshots and release --- omod/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 8562016f..9f10bd61 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -15,7 +15,7 @@ repo.mybahmni.org bahmni-artifactory-snapshots - https://repo.mybahmni.org.s3.amazonaws.com/artifactory/snapshot + https://oss.sonatype.org/content/repositories/snapshots always @@ -23,7 +23,7 @@ repo.mybahmni.org-release bahmni-artifactory-release - https://repo.mybahmni.org.s3.amazonaws.com/artifactory/release + https://oss.sonatype.org/content/repositories/release From 2f49d4beb128a9fb90f76c399a0e0790931262ee Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 26 Jul 2022 11:30:02 +0530 Subject: [PATCH 202/264] BAH-1681 | Refactor. removed commented lines in pom --- omod/pom.xml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 9f10bd61..176b7450 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -115,13 +115,6 @@ 2.10.1 test - - - - - - - From 822cdb6b9d463a656319aae8de7e505774d8ebe0 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 27 Jul 2022 14:46:57 +0530 Subject: [PATCH 203/264] BAH-2075 | Refactor. to retrieve patient document --- .../org/bahmni/module/hip/web/model/FhirDiagnosticReport.java | 2 +- .../main/java/org/bahmni/module/hip/web/service/Constants.java | 2 +- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java index f5004688..7c04fdaa 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java @@ -74,7 +74,7 @@ public static FhirDiagnosticReport fromOpenMrsDiagnosticReport(OpenMrsDiagnostic Integer encounterId = openMrsDiagnosticReport.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDiagnosticReport.getEncounterProviders()); List observationNotDocumentType = openMrsDiagnosticReport.getEncounter().getAllObs().stream() - .filter(obs -> (!obs.getConcept().getId().toString().equals(DOCUMENT_TYPE))).collect(Collectors.toList()); + .filter(obs -> (!obs.getConcept().getName().getName().equals(DOCUMENT_TYPE))).collect(Collectors.toList()); List observations = observationNotDocumentType.stream() .map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); List diagnosticReports = observationNotDocumentType.stream() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 76a8120c..c53205d7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -33,7 +33,7 @@ public class Constants { public static final String RADIOLOGY_TYPE = "6"; public static final String PATIENT_DOCUMENT_TYPE = "9"; - public static final String DOCUMENT_TYPE = "35"; + public static final String DOCUMENT_TYPE = "Document"; public static final String RADIOLOGY_REPORT = "Radiology Report"; public static final String PATIENT_DOCUMENT = "Patient Document"; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index f0b67f7c..479af63e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -197,7 +197,7 @@ private List getAttachments(Obs obs) throws IOException { StringBuilder valueText = new StringBuilder(); StringBuilder contentType = new StringBuilder(); for(Obs obs1 : obsList){ - if(obs1.getConcept().getId().toString().equals(DOCUMENT_TYPE)){ + if(obs1.getConcept().getName().getName().equals(DOCUMENT_TYPE)){ valueText.append(obs1.getValueText()); contentType.append(getTypeOfTheObsDocument(obs1.getValueText())); } From ff4a9b950c774db29103067903217768ba069fb1 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 29 Jul 2022 16:50:02 +0530 Subject: [PATCH 204/264] BAH-1900 | to retrieve document uploaded in lab results --- .../hip/web/model/OpenMrsLabResults.java | 9 ++-- .../web/service/DiagnosticReportService.java | 54 ++++++++++++------- 2 files changed, 39 insertions(+), 24 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java index 9d3163d6..defac59f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java @@ -7,7 +7,6 @@ import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; -import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResults; import java.util.List; import java.util.Map; @@ -20,21 +19,23 @@ public class OpenMrsLabResults { private List labOrderResults; private Patient patient; private final Set encounterProviders; + private final String uploadedFilePath; - public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults) { + public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults, String uploadedFilePath1) { this.encounter = encounter; this.patient = patient; this.labOrderResults = labOrderResults; this.encounterProviders = encounter.getEncounterProviders(); + this.uploadedFilePath = uploadedFilePath1; } - public static List from(Map> labOrderResultsMap) { + public static List from(Map> labOrderResultsMap, Map labReportDocuments) { return labOrderResultsMap .entrySet() .stream() - .map(entry -> new OpenMrsLabResults(entry.getKey().getEncounter(), entry.getKey().getPatient(), entry.getValue())) + .map(entry -> new OpenMrsLabResults(entry.getKey().getEncounter(), entry.getKey().getPatient(), entry.getValue(),labReportDocuments.get(entry))) .collect(Collectors.toList()); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 3d3189c7..03483028 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -122,43 +122,57 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } - private List getLabResults(String patientUuid, List visitsForVisitType) { - Patient patient = patientService.getPatientByUuid(patientUuid); - - List visits, visitsWithOrdersForVisitType ; - - visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); - visitsWithOrdersForVisitType = visits.stream().filter( visit -> visitsForVisitType.contains(visit.getVisitId()) ).collect(Collectors.toList());; - List orders = orderDao.getAllOrdersForVisits(new OrderType(3), visitsWithOrdersForVisitType); - + private List getLabResults(Patient patient,List visits,List visitsWithOrdersForVisitType) { + List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitsWithOrdersForVisitType); LabOrderResults results = labOrderResultsService.getAll(patient, visits, Integer.MAX_VALUE); Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); + Map labReportDocuments = new HashMap<>(); + + for (Visit visit: visits) { + for (Obs o: encounterDao.GetAllObsForVisit(visit,LAB_RESULT,LAB_REPORT).stream().filter(o -> !o.getVoided()).collect(Collectors.toList())) { + labReportDocuments.put(o.getOrder(),o.getValueText()); + } + } List labResults = groupedByOrderUUID.entrySet().stream().map(entry -> { - Optional orderForUuid = orders - .stream() - .filter(order -> order.getUuid().equals(entry.getKey())) - .findFirst(); - if (orderForUuid.isPresent()) - return new OpenMrsLabResults(orderForUuid.get().getEncounter(), orderForUuid.get().getPatient(), entry.getValue()); - else return null; - } ).filter(Objects::nonNull).collect(Collectors.toList()); + Optional orderForUuid = orders + .stream() + .filter(order -> order.getUuid().equals(entry.getKey())) + .findFirst(); + if (orderForUuid.isPresent()) { + return new OpenMrsLabResults(orderForUuid.get().getEncounter(), orderForUuid.get().getPatient(), entry.getValue(), labReportDocuments.get(orderForUuid.get())); + } + else return null; + } ).filter(Objects::nonNull).collect(Collectors.toList()); List bundles = labResults.stream().map(fhirBundledDiagnosticReportBuilder::fhirBundleResponseFor).collect(Collectors.toList()); return bundles; } + public List getLabResultsForVisits(String patientUuid, String visittype, Date visitStartDate) { - List visitsForVisitType = hipVisitDao.GetVisitIdsForVisitForLabResults(patientUuid, visittype,visitStartDate ); - return getLabResults(patientUuid, visitsForVisitType); + Patient patient = patientService.getPatientByUuid(patientUuid); + Visit visit = hipVisitDao.getPatientVisit(patient,visittype,visitStartDate); + List visits, visitsWithOrdersForVisitType = new ArrayList<>(); + + visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); + Boolean isOrderVisit = visits.contains(visit); + if(isOrderVisit) { visitsWithOrdersForVisitType.add(visit); }; + return getLabResults(patient, visits,visitsWithOrdersForVisitType); } public List getLabResultsForPrograms(String patientUuid, DateRange dateRange, String programName, String programEnrollmentId) { List visitsForProgram = hipVisitDao.GetVisitIdsForProgramForLabResults(patientUuid, programName, programEnrollmentId, dateRange.getFrom(), dateRange.getTo() ); - return getLabResults(patientUuid, visitsForProgram); + Patient patient = patientService.getPatientByUuid(patientUuid); + + List visits, visitsWithOrdersForProgram ; + + visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); + visitsWithOrdersForProgram = visits.stream().filter( visit -> visitsForProgram.contains(visit.getVisitId()) ).collect(Collectors.toList());; + return getLabResults(patient, visits, visitsWithOrdersForProgram); } } From 917d8bf366540b1c5f674251cea12540732e0ffa Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 29 Jul 2022 16:51:12 +0530 Subject: [PATCH 205/264] BAH-1900 | to send document uploaded in lab result in fhir bundle --- .../module/hip/web/model/FhirLabResult.java | 47 ++++++++++++++++++- .../module/hip/web/service/Constants.java | 20 ++++---- 2 files changed, 55 insertions(+), 12 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index f5de4a95..475431ed 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -2,6 +2,7 @@ import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; +import org.hl7.fhir.r4.model.Attachment; import org.hl7.fhir.r4.model.Bundle; import org.hl7.fhir.r4.model.CodeableConcept; import org.hl7.fhir.r4.model.Coding; @@ -10,19 +11,31 @@ import org.hl7.fhir.r4.model.Encounter; import org.hl7.fhir.r4.model.Observation; import org.hl7.fhir.r4.model.Patient; +import org.hl7.fhir.r4.model.Practitioner; import org.hl7.fhir.r4.model.Quantity; import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.StringType; -import org.hl7.fhir.r4.model.Practitioner; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; -import javax.validation.constraints.Null; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; +import static org.bahmni.module.hip.web.service.Constants.GIF; +import static org.bahmni.module.hip.web.service.Constants.IMAGE; +import static org.bahmni.module.hip.web.service.Constants.JPEG; +import static org.bahmni.module.hip.web.service.Constants.JPG; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_IMAGE_JPEG; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_PDF; +import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENTS_PATH; +import static org.bahmni.module.hip.web.service.Constants.PDF; +import static org.bahmni.module.hip.web.service.Constants.PNG; + public class FhirLabResult { private final Patient patient; @@ -69,6 +82,11 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); reports.setSubject(FHIRUtils.getReferenceToResource(patient)); reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); + try { + reports.setPresentedForm(getAttachments(labresult.getUploadedFilePath())); + } catch (IOException e) { + e.printStackTrace(); + } List results = new ArrayList<>(); @@ -129,4 +147,29 @@ private Composition initializeComposition(Date encounterTimestamp, String webURL composition.setTitle("Diagnostic Report"); return composition; } + + private static List getAttachments(String path) throws IOException { + List attachments = new ArrayList<>(); + Attachment attachment = new Attachment(); + attachment.setContentType(getTypeOfTheObsDocument(path)); + byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + path).toPath()); + attachment.setData(fileContent); + attachment.setTitle("LAB REPORT"); + attachments.add(attachment); + return attachments; + } + + private static String getTypeOfTheObsDocument(String valueText) { + if (valueText == null) return ""; + String extension = valueText.substring(valueText.indexOf('.') + 1); + if (extension.compareTo(JPEG) == 0 || extension.compareTo(JPG) == 0) { + return MIMETYPE_IMAGE_JPEG; + } else if (extension.compareTo(PNG) == 0 || extension.compareTo(GIF) == 0) { + return IMAGE + extension; + } else if (extension.compareTo(PDF) == 0) { + return MIMETYPE_PDF; + } else { + return ""; + } + } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 76a8120c..47c2c2c6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -20,16 +20,16 @@ public class Constants { static final String FHIR_ENC_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode"; - static final String PATIENT_DOCUMENTS_PATH = "/home/bahmni/document_images/"; - - static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; - static final String IMAGE = "image/"; - static final String JPEG = "jpeg"; - static final String JPG = "jpg"; - static final String PNG = "png"; - static final String GIF = "gif"; - static final String PDF = "pdf"; - static final String MIMETYPE_PDF = "application/pdf"; + public static final String PATIENT_DOCUMENTS_PATH = "/home/bahmni/document_images/"; + + public static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; + public static final String IMAGE = "image/"; + public static final String JPEG = "jpeg"; + public static final String JPG = "jpg"; + public static final String PNG = "png"; + public static final String GIF = "gif"; + public static final String PDF = "pdf"; + public static final String MIMETYPE_PDF = "application/pdf"; public static final String RADIOLOGY_TYPE = "6"; public static final String PATIENT_DOCUMENT_TYPE = "9"; From 6026f1d0af4fe7c103a0c425347da820a341d302 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 2 Aug 2022 19:26:38 +0530 Subject: [PATCH 206/264] BAH-1900 | added a interface and dao impl for diagnostic Report --- .../hip/api/dao/DiagnosticReportDao.java | 13 +++ .../api/dao/impl/DiagnosticReportDaoImpl.java | 100 ++++++++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java new file mode 100644 index 00000000..2bb7f5ac --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java @@ -0,0 +1,13 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Visit; + +import java.util.List; +import java.util.Map; + +public interface DiagnosticReportDao { + Map> getAllLabReportsForVisit(String patientUUID, Visit visit); + String getTestNameForLabReports(Obs obs); +} \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java new file mode 100644 index 00000000..89e2d917 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -0,0 +1,100 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.bahmni.module.hip.api.dao.DiagnosticReportDao; +import org.bahmni.module.hip.api.dao.EncounterDao; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.openmrs.Concept; +import org.openmrs.Encounter; +import org.openmrs.Obs; +import org.openmrs.Person; +import org.openmrs.Visit; +import org.openmrs.api.ConceptService; +import org.openmrs.api.EncounterService; +import org.openmrs.api.ObsService; +import org.openmrs.api.PatientService; +import org.openmrs.api.PersonService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Repository; + +import java.util.*; +import java.util.stream.Collectors; + + +@Repository +public class DiagnosticReportDaoImpl implements DiagnosticReportDao { + + private SessionFactory sessionFactory; + + PersonService personService; + ObsService obsService; + ConceptService conceptService; + EncounterService encounterService; + EncounterDao encounterDao; + PatientService patientService; + + private static Logger logger = LogManager.getLogger(DiagnosticReportDaoImpl.class); + + + @Autowired + public DiagnosticReportDaoImpl(PersonService personService, ObsService obsService, + ConceptService conceptService, EncounterService encounterService, + EncounterDao encounterDao, SessionFactory sessionFactory, PatientService patientService) + { + this.obsService = obsService; + this.personService = personService; + this.conceptService = conceptService; + this.encounterService = encounterService; + this.encounterDao = encounterDao; + this.sessionFactory = sessionFactory; + this.patientService = patientService; + } + + + private List getAllObsForDiagnosticReports(String patientUUID) { + Person person = personService.getPersonByUuid(patientUUID); + Concept concept = conceptService.getConcept("LAB_REPORT"); + List obs = obsService.getObservationsByPersonAndConcept(person,concept).stream().filter(o -> o.getOrder() == null).collect(Collectors.toList()); + return obs; + } + + @Override + public String getTestNameForLabReports(Obs obs){ + Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select concept_id from fhir_diagnostic_report where date_created = :obsDateTime ;"); + query.setParameter("obsDateTime", obs.getDateCreated()); + + return query.list().size() != 0 ? conceptService.getConcept(query.list().get(0).hashCode()).getName().getName() : null; + } + + @Override + public Map> getAllLabReportsForVisit(String patientUUID, Visit visit){ + Map> labReportsMap = new HashMap<>();; + List labReports = getAllObsForDiagnosticReports(patientUUID); + List encounters = encounterService.getEncountersByVisit(visit,false); + List nextEncounters = encounterService.getEncountersByPatient(patientService.getPatientByUuid(patientUUID)).stream().filter(e -> + encounters.get(encounters.size()-1).getId() < e.getId() + ).collect(Collectors.toList()); + for (Obs obs: labReports) { + for (Encounter encounter: encounters) { + Encounter nextEncounter; + Date nextEncounterDate = nextEncounters.size() != 0 ? nextEncounters.get(0).getDateCreated() : new Date(); + if(encounters.indexOf(encounter) < (encounters.size() - 1)){ + nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); + nextEncounterDate = nextEncounter.getDateCreated(); + } + if(obs.getDateCreated().equals(encounter.getDateCreated()) || (obs.getDateCreated().before(nextEncounterDate) && obs.getDateCreated().after(encounter.getDateCreated()))){ + if (labReportsMap.containsKey(encounter)) { + labReportsMap.get(encounter).add(obs); + } else { + labReportsMap.put(encounter, new ArrayList() {{ + add(obs); + }}); + } + } + } + } + return labReportsMap; + } +} \ No newline at end of file From 3d95a8fecb743c03befcc9d037f0b47d8cfc151d Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 2 Aug 2022 19:31:35 +0530 Subject: [PATCH 207/264] BAH-1900 | Refactor. diagnostic report service to send uploaded reports against new orders --- .../hip/web/model/OpenMrsLabResults.java | 9 +-- .../web/service/DiagnosticReportService.java | 61 +++++++++++++------ 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java index defac59f..658e93c6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java @@ -4,6 +4,7 @@ import org.hibernate.validator.constraints.NotEmpty; import org.openmrs.Encounter; import org.openmrs.EncounterProvider; +import org.openmrs.Obs; import org.openmrs.Order; import org.openmrs.Patient; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; @@ -19,19 +20,19 @@ public class OpenMrsLabResults { private List labOrderResults; private Patient patient; private final Set encounterProviders; - private final String uploadedFilePath; + private final Map observationsWithTestName; - public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults, String uploadedFilePath1) { + public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults, Map observationsWithTestName) { this.encounter = encounter; this.patient = patient; this.labOrderResults = labOrderResults; this.encounterProviders = encounter.getEncounterProviders(); - this.uploadedFilePath = uploadedFilePath1; + this.observationsWithTestName = observationsWithTestName; } - public static List from(Map> labOrderResultsMap, Map labReportDocuments) { + public static List from(Map> labOrderResultsMap, Map> labReportDocuments) { return labOrderResultsMap .entrySet() .stream() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 03483028..428b8bb4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.bahmnicore.dao.OrderDao; +import org.bahmni.module.hip.api.dao.DiagnosticReportDao; import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.HipVisitDao; import org.bahmni.module.hip.web.model.DateRange; @@ -38,14 +39,18 @@ public class DiagnosticReportService { private final EncounterDao encounterDao; private HipVisitDao hipVisitDao; private OrderDao orderDao; + private final DiagnosticReportDao diagnosticReportDao; private final String ORDER_TYPE = "Order"; private static final String RADIOLOGY_TYPE = "RADIOLOGY"; private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; private static final String DOCUMENT_TYPE = "Document"; + private static final String LAB_REPORT = "LAB_REPORT"; + private static final String LAB_RESULT = "LAB_RESULT"; private LabOrderResultsService labOrderResultsService; + @Autowired public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDiagnosticReportBuilder, PatientService patientService, @@ -53,8 +58,8 @@ public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDia LabOrderResultsService labOrderResultsService, EncounterDao encounterDao, HipVisitDao hipVisitDao, - OrderDao orderDao - ) { + OrderDao orderDao, + DiagnosticReportDao diagnosticReportDao) { this.fhirBundledDiagnosticReportBuilder = fhirBundledDiagnosticReportBuilder; this.patientService = patientService; this.encounterService = encounterService; @@ -62,7 +67,7 @@ public DiagnosticReportService(FhirBundledDiagnosticReportBuilder fhirBundledDia this.hipVisitDao = hipVisitDao; this.labOrderResultsService = labOrderResultsService; this.orderDao = orderDao; - + this.diagnosticReportDao = diagnosticReportDao; } public List getDiagnosticReportsForVisit(String patientUuid, String visitType, Date visitStartDate) { @@ -122,19 +127,21 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } - private List getLabResults(Patient patient,List visits,List visitsWithOrdersForVisitType) { - List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitsWithOrdersForVisitType); - LabOrderResults results = labOrderResultsService.getAll(patient, visits, Integer.MAX_VALUE); + private List getLabResults(Patient patient, List visitList) { + List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitList); + + LabOrderResults results = labOrderResultsService.getAll(patient, visitList, Integer.MAX_VALUE); Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); - Map labReportDocuments = new HashMap<>(); + Map labReportDocuments = new HashMap<>(); - for (Visit visit: visits) { + for (Visit visit: visitList) { for (Obs o: encounterDao.GetAllObsForVisit(visit,LAB_RESULT,LAB_REPORT).stream().filter(o -> !o.getVoided()).collect(Collectors.toList())) { - labReportDocuments.put(o.getOrder(),o.getValueText()); + labReportDocuments.put(o.getOrder(),o); } } - + + Map> labUploads = diagnosticReportDao.getAllLabReportsForVisit(patient.getUuid(), visitList.size() != 0 ? visitList.get(0) : null); List labResults = groupedByOrderUUID.entrySet().stream().map(entry -> { Optional orderForUuid = orders @@ -142,11 +149,33 @@ private List getLabResults(Patient patient,List v .filter(order -> order.getUuid().equals(entry.getKey())) .findFirst(); if (orderForUuid.isPresent()) { - return new OpenMrsLabResults(orderForUuid.get().getEncounter(), orderForUuid.get().getPatient(), entry.getValue(), labReportDocuments.get(orderForUuid.get())); + Map labReports = new HashMap() {{ + if (labReportDocuments.get(orderForUuid.get()) != null) { + Obs o = labReportDocuments.get(orderForUuid.get()); + put(o,diagnosticReportDao.getTestNameForLabReports(o)); + } + }}; + Encounter encounter = orderForUuid.get().getEncounter(); + if(labUploads.containsKey(encounter)) { + for (Obs o: labUploads.get(encounter)) { + labReports.put(o,diagnosticReportDao.getTestNameForLabReports(o)); + } + labUploads.remove(encounter); + } + return new OpenMrsLabResults(encounter, orderForUuid.get().getPatient(), entry.getValue(), labReports); } else return null; } ).filter(Objects::nonNull).collect(Collectors.toList()); + + labResults.addAll(labUploads.entrySet().stream().map(entry -> { + Map labReports = new HashMap<>(); + for (Obs o: entry.getValue()) { + labReports.put(o, diagnosticReportDao.getTestNameForLabReports(o)); + } + return new OpenMrsLabResults(entry.getKey(), entry.getKey().getPatient(), new ArrayList<>(),labReports); + } ).collect(Collectors.toList())); + List bundles = labResults.stream().map(fhirBundledDiagnosticReportBuilder::fhirBundleResponseFor).collect(Collectors.toList()); return bundles; } @@ -155,12 +184,10 @@ public List getLabResultsForVisits(String patientUuid, S { Patient patient = patientService.getPatientByUuid(patientUuid); Visit visit = hipVisitDao.getPatientVisit(patient,visittype,visitStartDate); - List visits, visitsWithOrdersForVisitType = new ArrayList<>(); + List visits = new ArrayList<>(); - visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); - Boolean isOrderVisit = visits.contains(visit); - if(isOrderVisit) { visitsWithOrdersForVisitType.add(visit); }; - return getLabResults(patient, visits,visitsWithOrdersForVisitType); + visits.add(visit); + return getLabResults(patient, visits); } public List getLabResultsForPrograms(String patientUuid, DateRange dateRange, String programName, String programEnrollmentId) @@ -172,7 +199,7 @@ public List getLabResultsForPrograms(String patientUuid, visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); visitsWithOrdersForProgram = visits.stream().filter( visit -> visitsForProgram.contains(visit.getVisitId()) ).collect(Collectors.toList());; - return getLabResults(patient, visits, visitsWithOrdersForProgram); + return getLabResults(patient, visitsWithOrdersForProgram); } } From 84dfb08d9243e8128148318cebeef10beeff5327 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 2 Aug 2022 19:34:04 +0530 Subject: [PATCH 208/264] BAH-1900 | Refactor. to create a bundle with both ordered and new test result uploads --- .github/workflows/build_and_upload.yml | 1 + .../module/hip/web/model/FhirLabResult.java | 36 ++++++++++++------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index a64ef6aa..5cd44bf8 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,6 +7,7 @@ on: push: branches: - master + - BAH-1900 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 475431ed..e42fa579 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -15,6 +15,7 @@ import org.hl7.fhir.r4.model.Quantity; import org.hl7.fhir.r4.model.Reference; import org.hl7.fhir.r4.model.StringType; +import org.openmrs.Obs; import org.openmrs.module.bahmniemrapi.laborder.contract.LabOrderResult; import java.io.File; @@ -23,6 +24,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.stream.Collectors; @@ -75,15 +77,21 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F List practitioners = labresult.getEncounterProviders().stream().map(fhirResourceMapper::mapToPractitioner).collect(Collectors.toList()); DiagnosticReport reports = new DiagnosticReport(); - LabOrderResult firstresult = labresult.getLabOrderResults().get(0); + LabOrderResult firstresult = labresult.getLabOrderResults().size() != 0 ? labresult.getLabOrderResults().get(0) : null; - reports.setId(firstresult.getOrderUuid()); - reports.setCode(new CodeableConcept().setText(firstresult.getPanelName()).addCoding(new Coding().setDisplay(firstresult.getPanelName()))); + String panelName = null; + for(Map.Entry report : labresult.getObservationsWithTestName().entrySet()){ + if(panelName == null) panelName = report.getValue(); + else panelName = panelName + " , " + report.getValue(); + } + + reports.setId(firstresult != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); + reports.setCode(new CodeableConcept().setText(panelName).addCoding(new Coding().setDisplay(panelName))); reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); reports.setSubject(FHIRUtils.getReferenceToResource(patient)); reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); try { - reports.setPresentedForm(getAttachments(labresult.getUploadedFilePath())); + reports.setPresentedForm(getAttachments(labresult.getObservationsWithTestName())); } catch (IOException e) { e.printStackTrace(); } @@ -92,7 +100,9 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F labresult.getLabOrderResults().stream().forEach( result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results) ); - FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), labresult.getLabOrderResults().get(0).getPanelName(), + + + FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), panelName, fhirResourceMapper.mapToEncounter( labresult.getEncounter() ), labresult.getEncounter().getEncounterDatetime(), reports, results, practitioners); @@ -148,14 +158,16 @@ private Composition initializeComposition(Date encounterTimestamp, String webURL return composition; } - private static List getAttachments(String path) throws IOException { + private static List getAttachments(Map obs) throws IOException { List attachments = new ArrayList<>(); - Attachment attachment = new Attachment(); - attachment.setContentType(getTypeOfTheObsDocument(path)); - byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + path).toPath()); - attachment.setData(fileContent); - attachment.setTitle("LAB REPORT"); - attachments.add(attachment); + for (Map.Entry o: obs.entrySet()) { + Attachment attachment = new Attachment(); + attachment.setContentType(getTypeOfTheObsDocument(o.getKey().getValueText())); + byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + o.getKey().getValueText()).toPath()); + attachment.setData(fileContent); + attachment.setTitle("LAB REPORT : " + o.getValue()); + attachments.add(attachment); + } return attachments; } From 80950c7ef103474876627acd84ac1d0a6131f08a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 3 Aug 2022 12:43:32 +0530 Subject: [PATCH 209/264] BAH-1900 | Refactor. rename and extracting into methods --- .../hip/api/dao/DiagnosticReportDao.java | 4 +- .../api/dao/impl/DiagnosticReportDaoImpl.java | 29 ++++++--- .../web/service/DiagnosticReportService.java | 59 +++++++++---------- 3 files changed, 53 insertions(+), 39 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java index 2bb7f5ac..769699d5 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java @@ -2,12 +2,14 @@ import org.openmrs.Encounter; import org.openmrs.Obs; +import org.openmrs.Order; import org.openmrs.Visit; import java.util.List; import java.util.Map; public interface DiagnosticReportDao { - Map> getAllLabReportsForVisit(String patientUUID, Visit visit); + Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit); String getTestNameForLabReports(Obs obs); + Map getAllOrderedTestUploads(List visitList); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java index 89e2d917..1de0a156 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -9,6 +9,7 @@ import org.openmrs.Concept; import org.openmrs.Encounter; import org.openmrs.Obs; +import org.openmrs.Order; import org.openmrs.Person; import org.openmrs.Visit; import org.openmrs.api.ConceptService; @@ -27,15 +28,16 @@ public class DiagnosticReportDaoImpl implements DiagnosticReportDao { private SessionFactory sessionFactory; - - PersonService personService; - ObsService obsService; - ConceptService conceptService; - EncounterService encounterService; - EncounterDao encounterDao; - PatientService patientService; + private PersonService personService; + private ObsService obsService; + private ConceptService conceptService; + private EncounterService encounterService; + private EncounterDao encounterDao; + private PatientService patientService; private static Logger logger = LogManager.getLogger(DiagnosticReportDaoImpl.class); + private static final String LAB_REPORT = "LAB_REPORT"; + private static final String LAB_RESULT = "LAB_RESULT"; @Autowired @@ -69,7 +71,7 @@ public String getTestNameForLabReports(Obs obs){ } @Override - public Map> getAllLabReportsForVisit(String patientUUID, Visit visit){ + public Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit){ Map> labReportsMap = new HashMap<>();; List labReports = getAllObsForDiagnosticReports(patientUUID); List encounters = encounterService.getEncountersByVisit(visit,false); @@ -97,4 +99,15 @@ public Map> getAllLabReportsForVisit(String patientUUID, Vis } return labReportsMap; } + + @Override + public Map getAllOrderedTestUploads(List visitList) { + Map documentObs = new HashMap<>(); + for (Visit visit : visitList) { + for (Obs o : encounterDao.GetAllObsForVisit(visit, LAB_RESULT, LAB_REPORT).stream().filter(o -> !o.getVoided()).collect(Collectors.toList())) { + documentObs.put(o.getOrder(), o); + } + } + return documentObs; + } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 428b8bb4..8a98fcef 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -44,8 +44,6 @@ public class DiagnosticReportService { private static final String RADIOLOGY_TYPE = "RADIOLOGY"; private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; private static final String DOCUMENT_TYPE = "Document"; - private static final String LAB_REPORT = "LAB_REPORT"; - private static final String LAB_RESULT = "LAB_RESULT"; private LabOrderResultsService labOrderResultsService; @@ -127,21 +125,36 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } + private Map getLabUploadsMap(Map orderedTestUploads, Map> unorderedUploads, Order order) { + Map labReports = new HashMap() {{ + if (orderedTestUploads.get(order) != null) { + Obs o = orderedTestUploads.get(order); + put(o,diagnosticReportDao.getTestNameForLabReports(o)); + } + }}; + Encounter encounter = order.getEncounter(); + if(unorderedUploads.containsKey(encounter)) { + putAllObsIntoMap(unorderedUploads.get(encounter),labReports); + unorderedUploads.remove(encounter); + } + return labReports; + } + + private void putAllObsIntoMap(List obs,Map labReports) { + for (Obs o: obs) { + labReports.put(o, diagnosticReportDao.getTestNameForLabReports(o)); + } + } private List getLabResults(Patient patient, List visitList) { - List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitList); + + Map orderedTestUploads = diagnosticReportDao.getAllOrderedTestUploads(visitList); + Map> unorderedUploads = diagnosticReportDao.getAllUnorderedUploadsForVisit(patient.getUuid(), visitList.size() != 0 ? visitList.get(0) : null); LabOrderResults results = labOrderResultsService.getAll(patient, visitList, Integer.MAX_VALUE); Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); - Map labReportDocuments = new HashMap<>(); - for (Visit visit: visitList) { - for (Obs o: encounterDao.GetAllObsForVisit(visit,LAB_RESULT,LAB_REPORT).stream().filter(o -> !o.getVoided()).collect(Collectors.toList())) { - labReportDocuments.put(o.getOrder(),o); - } - } - - Map> labUploads = diagnosticReportDao.getAllLabReportsForVisit(patient.getUuid(), visitList.size() != 0 ? visitList.get(0) : null); + List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitList); List labResults = groupedByOrderUUID.entrySet().stream().map(entry -> { Optional orderForUuid = orders @@ -149,30 +162,16 @@ private List getLabResults(Patient patient, List .filter(order -> order.getUuid().equals(entry.getKey())) .findFirst(); if (orderForUuid.isPresent()) { - Map labReports = new HashMap() {{ - if (labReportDocuments.get(orderForUuid.get()) != null) { - Obs o = labReportDocuments.get(orderForUuid.get()); - put(o,diagnosticReportDao.getTestNameForLabReports(o)); - } - }}; - Encounter encounter = orderForUuid.get().getEncounter(); - if(labUploads.containsKey(encounter)) { - for (Obs o: labUploads.get(encounter)) { - labReports.put(o,diagnosticReportDao.getTestNameForLabReports(o)); - } - labUploads.remove(encounter); - } - return new OpenMrsLabResults(encounter, orderForUuid.get().getPatient(), entry.getValue(), labReports); + return new OpenMrsLabResults(orderForUuid.get().getEncounter(), orderForUuid.get().getPatient(), entry.getValue(), + getLabUploadsMap(orderedTestUploads,unorderedUploads,orderForUuid.get())); } else return null; } ).filter(Objects::nonNull).collect(Collectors.toList()); - labResults.addAll(labUploads.entrySet().stream().map(entry -> { - Map labReports = new HashMap<>(); - for (Obs o: entry.getValue()) { - labReports.put(o, diagnosticReportDao.getTestNameForLabReports(o)); - } + labResults.addAll(unorderedUploads.entrySet().stream().map(entry -> { + Map labReports = new HashMap<>(); + putAllObsIntoMap(entry.getValue(),labReports); return new OpenMrsLabResults(entry.getKey(), entry.getKey().getPatient(), new ArrayList<>(),labReports); } ).collect(Collectors.toList())); From 0b1bd8fd161a5a5b4bf46a18cd70b71d01be3401 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 3 Aug 2022 14:31:47 +0530 Subject: [PATCH 210/264] BAH-1900 | Fixed. carecontext as null in bundle --- .../hip/web/service/FhirBundledDiagnosticReportBuilder.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDiagnosticReportBuilder.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDiagnosticReportBuilder.java index 2d7bc3ac..e2721bcf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDiagnosticReportBuilder.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FhirBundledDiagnosticReportBuilder.java @@ -47,8 +47,13 @@ public DiagnosticReportBundle fhirBundleResponseFor(OpenMrsLabResults results) { Bundle diagnosticReportBundle = FhirLabResult.fromOpenMrsLabResults(results, fhirResourceMapper) .bundleLabResults(organizationContext.webUrl(), fhirResourceMapper); + CareContext careContext = careContextService.careContextFor( + results.getEncounter(), + organizationContext.careContextType()); + return DiagnosticReportBundle.builder() .bundle(diagnosticReportBundle) + .careContext(careContext) .build(); } } From 63adf4081b1807d2ef90cc5be8f7121760814949 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 3 Aug 2022 14:59:27 +0530 Subject: [PATCH 211/264] BAH-2116 | Add. to fetch name for non-coded conditions --- .../org/bahmni/module/hip/web/service/ConsultationService.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 6c6c3c0e..7788d221 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -130,8 +130,7 @@ private Map> getEncounterListMapForMedicalHist encounterMedicalHistoryMap.put(medicalHistory.getKey(), new ArrayList<>()); } for(Condition condition : medicalHistory.getValue()){ - encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConcept().getDisplayString(), condition.getDateCreated())); - } + encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConditionNonCoded() != null ? condition.getConditionNonCoded() : condition.getConcept().getDisplayString(), condition.getDateCreated())); } } for(Obs obs : medicalHistoryDiagnosisMap){ if (!encounterMedicalHistoryMap.containsKey(obs.getEncounter())){ From d1bd99468939ffc9c2f0d4cfbf93426cf79c34fc Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 3 Aug 2022 15:26:04 +0530 Subject: [PATCH 212/264] BAH-2116 | Add. to fetch non-coded diagnosis as a part of careContext --- .../main/java/org/bahmni/module/hip/api/dao/Constants.java | 1 + .../org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java | 2 ++ .../bahmni/module/hip/web/service/ConsultationService.java | 5 +++-- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java index 337418aa..11c1f150 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java @@ -17,4 +17,5 @@ public class Constants { public static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; public static final String DOCUMENT_TYPE = "Document"; public static final String CODED_DIAGNOSIS = "Coded Diagnosis"; + public static final String NON_CODED_DIAGNOSIS = "Non-coded Diagnosis"; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 4707a29f..b90581c1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -32,6 +32,7 @@ import static org.bahmni.module.hip.api.dao.Constants.CODED_DIAGNOSIS; import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; +import static org.bahmni.module.hip.api.dao.Constants.NON_CODED_DIAGNOSIS; import static org.bahmni.module.hip.api.dao.Constants.PROCEDURE_NOTES; @Repository @@ -101,6 +102,7 @@ public Map> getMedicalHistoryConditions(Visit visit) @Override public List getMedicalHistoryDiagnosis(Visit visit) { List medicalHistoryDiagnosisObsMap = encounterDao.GetAllObsForVisit(visit, CONSULTATION, CODED_DIAGNOSIS); + medicalHistoryDiagnosisObsMap.addAll(encounterDao.GetAllObsForVisit(visit, CONSULTATION, NON_CODED_DIAGNOSIS)); return medicalHistoryDiagnosisObsMap; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 7788d221..55e82dec 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -130,13 +130,14 @@ private Map> getEncounterListMapForMedicalHist encounterMedicalHistoryMap.put(medicalHistory.getKey(), new ArrayList<>()); } for(Condition condition : medicalHistory.getValue()){ - encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConditionNonCoded() != null ? condition.getConditionNonCoded() : condition.getConcept().getDisplayString(), condition.getDateCreated())); } + encounterMedicalHistoryMap.get(medicalHistory.getKey()).add(new OpenMrsCondition(condition.getUuid(), condition.getConditionNonCoded() != null ? condition.getConditionNonCoded() : condition.getConcept().getDisplayString(), condition.getDateCreated())); + } } for(Obs obs : medicalHistoryDiagnosisMap){ if (!encounterMedicalHistoryMap.containsKey(obs.getEncounter())){ encounterMedicalHistoryMap.put(obs.getEncounter(), new ArrayList<>()); } - encounterMedicalHistoryMap.get(obs.getEncounter()).add(new OpenMrsCondition(obs.getUuid(), obs.getValueCoded().getDisplayString(), obs.getDateCreated())); + encounterMedicalHistoryMap.get(obs.getEncounter()).add(new OpenMrsCondition(obs.getUuid(), obs.getValueText() != null ? obs.getValueText() : obs.getValueCoded().getDisplayString(), obs.getDateCreated())); } return encounterMedicalHistoryMap; } From 45626d287f8a2623fa389d40383cd64c4fc9d14d Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 8 Aug 2022 16:47:18 +0530 Subject: [PATCH 213/264] Updated. location name --- .../bahmni/module/hip/web/service/ExistingPatientService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index 56436855..ff8edf8e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -28,7 +28,7 @@ public class ExistingPatientService { private final PatientDao patientDao; private final PatientService patientService; private final LocationService locationService; - private static final String REGISTRATION_DESK = "Registration Desk"; + private static final String LOCATION = "Bahmni Clinic"; private static final String PHONE_NUMBER = "phoneNumber"; static final int PHONE_NUMBER_LENGTH = 10; @@ -134,7 +134,7 @@ private List getPatients(String patientName, int patientYearOfB private List filterPatientsByName(String patientName) { return patientDao.getPatients("", patientName, null, null, "", 100, 0, null, "", null, null, null, - locationService.getLocation(REGISTRATION_DESK).getUuid(), false, false); + locationService.getLocation(LOCATION).getUuid(), false, false); } From 73e9571632580cd566709c22c14cd6a9efd23ce5 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 12 Aug 2022 17:30:23 +0530 Subject: [PATCH 214/264] Refactor. fetching condition in care-context --- .../hip/api/dao/impl/OPConsultDaoImpl.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index b90581c1..546d4d3b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -62,6 +62,8 @@ public Map> getMedicalHistoryConditions(Visit visit) final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; List encounters = encounterDao.GetEncountersForVisit(visit, CONSULTATION); + if(encounters.size() == 0) + return new HashMap<>(); List conditions = conditionService.getActiveConditions(visit.getPatient()) .stream() .filter(condition -> condition.getClinicalStatus().name().equals(conditionStatusActive) || @@ -75,16 +77,18 @@ public Map> getMedicalHistoryConditions(Visit visit) } Map> encounterConditionsMap = new HashMap<>(); - for(Condition condition : emrapiconditions){ - for(Encounter encounter : encounters){ - Date nextEncounterDate; - if(encounters.indexOf(encounter) != 0){ - Encounter nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)-1).getId()); + List nextEncounters = encounterService.getEncountersByPatient(visit.getPatient()).stream().filter(e -> + encounters.get(encounters.size()-1).getId() < e.getId() + ).collect(Collectors.toList()); + for(Condition condition : emrapiconditions) { + for (Encounter encounter: encounters) { + Encounter nextEncounter; + Date nextEncounterDate = nextEncounters.size() != 0 ? nextEncounters.get(0).getDateCreated() : new Date(); + if(encounters.indexOf(encounter) < (encounters.size() - 1)){ + nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); nextEncounterDate = nextEncounter.getDateCreated(); } - else - nextEncounterDate = new Date(); - if (condition.getDateCreated().equals(encounter.getDateCreated()) || condition.getDateCreated().after(encounter.getDateCreated()) && condition.getDateCreated().before(nextEncounterDate)) { + if(condition.getDateCreated().equals(encounter.getDateCreated()) || (condition.getDateCreated().before(nextEncounterDate) && condition.getDateCreated().after(encounter.getDateCreated()))){ if (encounterConditionsMap.containsKey(encounter)) { encounterConditionsMap.get(encounter).add(condition); } else { From 46116bd674149c3f1fbc42e03139d18ebff7a9bd Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 18 Aug 2022 13:11:33 +0530 Subject: [PATCH 215/264] BAH-2167 | Refactor. to send visit dateTime in careContext --- .../hip/web/model/FhirDiagnosticReport.java | 14 +++++++------- .../hip/web/model/FhirDischargeSummary.java | 18 +++++++++--------- .../module/hip/web/model/FhirLabResult.java | 16 ++++++++-------- .../module/hip/web/model/FhirOPConsult.java | 18 +++++++++--------- .../module/hip/web/model/FhirPrescription.java | 16 ++++++++-------- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java index 7c04fdaa..7dbbbc5c 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java @@ -24,7 +24,7 @@ public class FhirDiagnosticReport { private final List diagnosticReports; - private final Date encounterTimestamp; + private final Date visitTimestamp; private final Integer encounterID; private final Encounter encounter; private final List practitioners; @@ -32,7 +32,7 @@ public class FhirDiagnosticReport { private final Reference patientReference; private final List obs; - private FhirDiagnosticReport(Date encounterDatetime, + private FhirDiagnosticReport(Date visitDateTime, List diagnosticReports, Integer encounterID, Encounter encounter, @@ -40,7 +40,7 @@ private FhirDiagnosticReport(Date encounterDatetime, Patient patient, Reference patientReference, List obs) { - this.encounterTimestamp = encounterDatetime; + this.visitTimestamp = visitDateTime; this.diagnosticReports = diagnosticReports; this.encounterID = encounterID; this.encounter = encounter; @@ -53,7 +53,7 @@ private FhirDiagnosticReport(Date encounterDatetime, public Bundle bundleDiagnosticReport(String webUrl) { String bundleID = String.format("PR-%d", encounterID); - Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + Bundle bundle = FHIRUtils.createBundle(visitTimestamp, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); FHIRUtils.addToBundleEntry(bundle, practitioners, false); @@ -70,7 +70,7 @@ public static FhirDiagnosticReport fromOpenMrsDiagnosticReport(OpenMrsDiagnostic Patient patient = fhirResourceMapper.mapToPatient(openMrsDiagnosticReport.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsDiagnosticReport.getEncounter()); - Date encounterDatetime = openMrsDiagnosticReport.getEncounter().getEncounterDatetime(); + Date visitDateTime = openMrsDiagnosticReport.getEncounter().getVisit().getDateCreated(); Integer encounterId = openMrsDiagnosticReport.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDiagnosticReport.getEncounterProviders()); List observationNotDocumentType = openMrsDiagnosticReport.getEncounter().getAllObs().stream() @@ -87,12 +87,12 @@ public static FhirDiagnosticReport fromOpenMrsDiagnosticReport(OpenMrsDiagnostic diagnosticReport.setResult(observations.stream().map(FHIRUtils::getReferenceToResource) .collect(Collectors.toList())); }).collect(Collectors.toList()); - return new FhirDiagnosticReport(encounterDatetime, diagnosticReportList, encounterId, encounter, practitioners, + return new FhirDiagnosticReport(visitDateTime, diagnosticReportList, encounterId, encounter, practitioners, patient, patientReference, observations); } private Composition compositionFrom(String webURL) { - Composition composition = initializeComposition(encounterTimestamp, webURL); + Composition composition = initializeComposition(visitTimestamp, webURL); Composition.SectionComponent compositionSection = composition.addSection(); practitioners diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java index 49f5e72b..a15e7767 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java @@ -28,7 +28,7 @@ public class FhirDischargeSummary { - private final Date encounterTimestamp; + private final Date visitTimestamp; private final Integer encounterID; private final Encounter encounter; private final List practitioners; @@ -46,7 +46,7 @@ public class FhirDischargeSummary { public FhirDischargeSummary(Integer encounterID, Encounter encounter, - Date encounterTimestamp, + Date visitTimestamp, List practitioners, Reference patientReference, List chiefComplaints, @@ -59,7 +59,7 @@ public FhirDischargeSummary(Integer encounterID, List patientDocuments, Procedure procedures, List serviceRequest){ - this.encounterTimestamp = encounterTimestamp; + this.visitTimestamp = visitTimestamp; this.encounterID = encounterID; this.encounter = encounter; this.chiefComplaints = chiefComplaints; @@ -79,7 +79,7 @@ public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeS Patient patient = fhirResourceMapper.mapToPatient(openMrsDischargeSummary.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsDischargeSummary.getEncounter()); - Date encounterDatetime = openMrsDischargeSummary.getEncounter().getEncounterDatetime(); + Date visitDatetime = openMrsDischargeSummary.getEncounter().getVisit().getDateCreated(); Integer encounterId = openMrsDischargeSummary.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDischargeSummary.getEncounter().getEncounterProviders()); List carePlans = openMrsDischargeSummary.getCarePlanObs().stream(). @@ -105,12 +105,12 @@ public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeS List serviceRequest = openMrsDischargeSummary.getOrders().stream(). map(fhirResourceMapper::mapToOrder).collect(Collectors.toList()); - return new FhirDischargeSummary(encounterId, encounter, encounterDatetime, practitioners, patientReference, chiefComplaints, medicationRequestsList, medications, fhirMedicalHistoryList, patient, carePlans, physicalExaminations, patientDocuments, procedures, serviceRequest); + return new FhirDischargeSummary(encounterId, encounter, visitDatetime, practitioners, patientReference, chiefComplaints, medicationRequestsList, medications, fhirMedicalHistoryList, patient, carePlans, physicalExaminations, patientDocuments, procedures, serviceRequest); } public Bundle bundleDischargeSummary(String webUrl){ String bundleID = String.format("PR-%d", encounterID); - Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + Bundle bundle = FHIRUtils.createBundle(visitTimestamp, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); FHIRUtils.addToBundleEntry(bundle, practitioners, false); FHIRUtils.addToBundleEntry(bundle, medicationRequests, false); @@ -128,7 +128,7 @@ public Bundle bundleDischargeSummary(String webUrl){ } private Composition compositionFrom(String webURL) { - Composition composition = initializeComposition(encounterTimestamp, webURL); + Composition composition = initializeComposition(visitTimestamp, webURL); composition .setEncounter(FHIRUtils.getReferenceToResource(encounter)) .setSubject(patientReference); @@ -225,10 +225,10 @@ private Composition compositionFrom(String webURL) { return composition; } - private Composition initializeComposition(Date encounterTimestamp, String webURL) { + private Composition initializeComposition(Date visitTimestamp, String webURL) { Composition composition = new Composition(); composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp); + composition.setDate(visitTimestamp); composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "Composition")); composition.setStatus(Composition.CompositionStatus.FINAL); composition.setType(FHIRUtils.getOPConsultType()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index f5de4a95..dffb428f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -27,15 +27,15 @@ public class FhirLabResult { private final Patient patient; private final Encounter encounter; - private final Date encounterTime; + private final Date visitTime; private final DiagnosticReport report; private final List results; private final List practitioners; - public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date encounterTime, DiagnosticReport report, List results, List practitioners) { + public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date visitTime, DiagnosticReport report, List results, List practitioners) { this.patient = patient; this.encounter = encounter; - this.encounterTime = encounterTime; + this.visitTime = visitTime; this.report = report; this.results = results; this.practitioners = practitioners; @@ -44,7 +44,7 @@ public FhirLabResult(Patient patient, String panelName, Encounter encounter, Dat public Bundle bundleLabResults (String webUrl, FHIRResourceMapper fhirResourceMapper) { String bundleID = String.format("LR-%s", encounter.getId()); - Bundle bundle = FHIRUtils.createBundle(encounterTime, bundleID, webUrl); + Bundle bundle = FHIRUtils.createBundle(visitTime, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); @@ -76,7 +76,7 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), labresult.getLabOrderResults().get(0).getPanelName(), fhirResourceMapper.mapToEncounter( labresult.getEncounter() ), - labresult.getEncounter().getEncounterDatetime(), reports, results, practitioners); + labresult.getEncounter().getVisit().getDateCreated(), reports, results, practitioners); return fhirLabResult; } @@ -101,7 +101,7 @@ private static void mapToObsFromLabResult(LabOrderResult result, Patient patient } private Composition compositionFrom(String webURL) { - Composition composition = initializeComposition(encounterTime, webURL); + Composition composition = initializeComposition(visitTime, webURL); Composition.SectionComponent compositionSection = composition.addSection(); Reference patientReference = FHIRUtils.getReferenceToResource(patient); @@ -118,11 +118,11 @@ private Composition compositionFrom(String webURL) { return composition; } - private Composition initializeComposition(Date encounterTimestamp, String webURL) { + private Composition initializeComposition(Date visitTimestamp, String webURL) { Composition composition = new Composition(); composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp); + composition.setDate(visitTimestamp); composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "document")); composition.setStatus(Composition.CompositionStatus.FINAL); composition.setType(FHIRUtils.getDiagnosticReportType()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index f477c629..c7ad2cfb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -28,7 +28,7 @@ public class FhirOPConsult { private final List chiefComplaints; private final List medicalHistory; - private final Date encounterTimestamp; + private final Date visitTimeStamp; private final Integer encounterID; private final Encounter encounter; private final List practitioners; @@ -42,7 +42,7 @@ public class FhirOPConsult { private final List serviceRequest; public FhirOPConsult(List chiefComplaints, - List medicalHistory, Date encounterTimestamp, + List medicalHistory, Date visitTimeStamp, Integer encounterID, Encounter encounter, List practitioners, @@ -56,7 +56,7 @@ public FhirOPConsult(List chiefComplaints, List serviceRequest) { this.chiefComplaints = chiefComplaints; this.medicalHistory = medicalHistory; - this.encounterTimestamp = encounterTimestamp; + this.visitTimeStamp = visitTimeStamp; this.encounterID = encounterID; this.encounter = encounter; this.practitioners = practitioners; @@ -72,7 +72,7 @@ public FhirOPConsult(List chiefComplaints, public Bundle bundleOPConsult(String webUrl) { String bundleID = String.format("PR-%d", encounterID); - Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + Bundle bundle = FHIRUtils.createBundle(visitTimeStamp, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); FHIRUtils.addToBundleEntry(bundle, practitioners, false); FHIRUtils.addToBundleEntry(bundle, patient, false); @@ -92,7 +92,7 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu Patient patient = fhirResourceMapper.mapToPatient(openMrsOPConsult.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsOPConsult.getEncounter()); - Date encounterDatetime = openMrsOPConsult.getEncounter().getEncounterDatetime(); + Date visitDatetime = openMrsOPConsult.getEncounter().getVisit().getDateCreated(); Integer encounterId = openMrsOPConsult.getEncounter().getId(); List medicationRequestsList = openMrsOPConsult.getDrugOrders().stream(). map(fhirResourceMapper::mapToMedicationRequest).collect(Collectors.toList()); @@ -116,12 +116,12 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu List serviceRequest = openMrsOPConsult.getOrders().stream(). map(fhirResourceMapper::mapToOrder).collect(Collectors.toList()); - return new FhirOPConsult(fhirChiefComplaintConditionList, fhirMedicalHistoryList, encounterDatetime, encounterId, encounter, practitioners, + return new FhirOPConsult(fhirChiefComplaintConditionList, fhirMedicalHistoryList, visitDatetime, encounterId, encounter, practitioners, patient, patientReference, fhirObservationList, medicationRequestsList, medications, procedure, patientDocuments, serviceRequest); } private Composition compositionFrom(String webURL) { - Composition composition = initializeComposition(encounterTimestamp, webURL); + Composition composition = initializeComposition(visitTimeStamp, webURL); composition .setEncounter(FHIRUtils.getReferenceToResource(encounter)) .setSubject(patientReference); @@ -207,10 +207,10 @@ private Composition compositionFrom(String webURL) { return composition; } - private Composition initializeComposition(Date encounterTimestamp, String webURL) { + private Composition initializeComposition(Date visitTimeStamp, String webURL) { Composition composition = new Composition(); composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp); + composition.setDate(visitTimeStamp); composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "Composition")); composition.setStatus(Composition.CompositionStatus.FINAL); composition.setType(FHIRUtils.getOPConsultType()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index fb72e097..cd008533 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -23,7 +23,7 @@ @Getter public class FhirPrescription { - private final Date encounterTimestamp; + private final Date visitTimeStamp; private final Integer encounterID; private final Encounter encounter; private final List practitioners; @@ -32,11 +32,11 @@ public class FhirPrescription { private final List medications; private final List medicationRequests; - private FhirPrescription(Date encounterTimestamp, Integer encounterID, Encounter encounter, + private FhirPrescription(Date visitTimeStamp, Integer encounterID, Encounter encounter, List practitioners, Patient patient, Reference patientReference, List medications, List medicationRequests) { - this.encounterTimestamp = encounterTimestamp; + this.visitTimeStamp = visitTimeStamp; this.encounterID = encounterID; this.encounter = encounter; this.practitioners = practitioners; @@ -48,7 +48,7 @@ private FhirPrescription(Date encounterTimestamp, Integer encounterID, Encounter public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHIRResourceMapper fhirResourceMapper) { - Date encounterDatetime = openMrsPrescription.getEncounter().getEncounterDatetime(); + Date encounterDatetime = openMrsPrescription.getEncounter().getVisit().getDateCreated(); Integer encounterId = openMrsPrescription.getEncounter().getId(); Patient patient = fhirResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); @@ -62,7 +62,7 @@ public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHI public Bundle bundle(String webUrl){ String bundleID = String.format("PR-%d", encounterID); - Bundle bundle = FHIRUtils.createBundle(encounterTimestamp, bundleID, webUrl); + Bundle bundle = FHIRUtils.createBundle(visitTimeStamp, bundleID, webUrl); FHIRUtils.addToBundleEntry(bundle, compositionFrom(webUrl), false); FHIRUtils.addToBundleEntry(bundle, practitioners, false); @@ -74,7 +74,7 @@ public Bundle bundle(String webUrl){ } private Composition compositionFrom(String webURL){ - Composition composition = initializeComposition(encounterTimestamp, webURL); + Composition composition = initializeComposition(visitTimeStamp, webURL); Composition.SectionComponent compositionSection = composition.addSection(); practitioners @@ -97,11 +97,11 @@ private Composition compositionFrom(String webURL){ return composition; } - private Composition initializeComposition(Date encounterTimestamp, String webURL) { + private Composition initializeComposition(Date visitTimeStamp, String webURL) { Composition composition = new Composition(); composition.setId(UUID.randomUUID().toString()); - composition.setDate(encounterTimestamp); + composition.setDate(visitTimeStamp); composition.setIdentifier(FHIRUtils.getIdentifier(composition.getId(), webURL, "document")); composition.setStatus(Composition.CompositionStatus.FINAL); composition.setType(FHIRUtils.getPrescriptionType()); From 616bcb8911e03f7e3bbddce7fe0504d9c0fd119c Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 23 Aug 2022 17:08:33 +0530 Subject: [PATCH 216/264] BAH-2167 | Refactor. to send visit start dateTime in care-context --- .../org/bahmni/module/hip/web/model/FhirDiagnosticReport.java | 2 +- .../org/bahmni/module/hip/web/model/FhirDischargeSummary.java | 2 +- .../java/org/bahmni/module/hip/web/model/FhirLabResult.java | 2 +- .../java/org/bahmni/module/hip/web/model/FhirOPConsult.java | 2 +- .../java/org/bahmni/module/hip/web/model/FhirPrescription.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java index 7dbbbc5c..1e5446fd 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java @@ -70,7 +70,7 @@ public static FhirDiagnosticReport fromOpenMrsDiagnosticReport(OpenMrsDiagnostic Patient patient = fhirResourceMapper.mapToPatient(openMrsDiagnosticReport.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsDiagnosticReport.getEncounter()); - Date visitDateTime = openMrsDiagnosticReport.getEncounter().getVisit().getDateCreated(); + Date visitDateTime = openMrsDiagnosticReport.getEncounter().getVisit().getStartDatetime(); Integer encounterId = openMrsDiagnosticReport.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDiagnosticReport.getEncounterProviders()); List observationNotDocumentType = openMrsDiagnosticReport.getEncounter().getAllObs().stream() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java index a15e7767..2554122e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDischargeSummary.java @@ -79,7 +79,7 @@ public static FhirDischargeSummary fromOpenMrsDischargeSummary(OpenMrsDischargeS Patient patient = fhirResourceMapper.mapToPatient(openMrsDischargeSummary.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsDischargeSummary.getEncounter()); - Date visitDatetime = openMrsDischargeSummary.getEncounter().getVisit().getDateCreated(); + Date visitDatetime = openMrsDischargeSummary.getEncounter().getVisit().getStartDatetime(); Integer encounterId = openMrsDischargeSummary.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDischargeSummary.getEncounter().getEncounterProviders()); List carePlans = openMrsDischargeSummary.getCarePlanObs().stream(). diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index dffb428f..bb105d31 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -76,7 +76,7 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), labresult.getLabOrderResults().get(0).getPanelName(), fhirResourceMapper.mapToEncounter( labresult.getEncounter() ), - labresult.getEncounter().getVisit().getDateCreated(), reports, results, practitioners); + labresult.getEncounter().getVisit().getStartDatetime(), reports, results, practitioners); return fhirLabResult; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index c7ad2cfb..130d91ff 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -92,7 +92,7 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu Patient patient = fhirResourceMapper.mapToPatient(openMrsOPConsult.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); Encounter encounter = fhirResourceMapper.mapToEncounter(openMrsOPConsult.getEncounter()); - Date visitDatetime = openMrsOPConsult.getEncounter().getVisit().getDateCreated(); + Date visitDatetime = openMrsOPConsult.getEncounter().getVisit().getStartDatetime(); Integer encounterId = openMrsOPConsult.getEncounter().getId(); List medicationRequestsList = openMrsOPConsult.getDrugOrders().stream(). map(fhirResourceMapper::mapToMedicationRequest).collect(Collectors.toList()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java index cd008533..8936a0cb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirPrescription.java @@ -48,7 +48,7 @@ private FhirPrescription(Date visitTimeStamp, Integer encounterID, Encounter enc public static FhirPrescription from(OpenMrsPrescription openMrsPrescription, FHIRResourceMapper fhirResourceMapper) { - Date encounterDatetime = openMrsPrescription.getEncounter().getVisit().getDateCreated(); + Date encounterDatetime = openMrsPrescription.getEncounter().getVisit().getStartDatetime(); Integer encounterId = openMrsPrescription.getEncounter().getId(); Patient patient = fhirResourceMapper.mapToPatient(openMrsPrescription.getPatient()); Reference patientReference = FHIRUtils.getReferenceToResource(patient); From b3f453988fb6847ee9cd52a255689bab88156b38 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 25 Aug 2022 15:31:34 +0530 Subject: [PATCH 217/264] BAH-1900 | Refactor. to create a bundle with ordered test uploads --- .../hip/api/dao/DiagnosticReportDao.java | 2 +- .../api/dao/impl/DiagnosticReportDaoImpl.java | 34 ++++++++++++++----- .../web/service/DiagnosticReportService.java | 16 ++++----- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java index 769699d5..8cbd48c7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java @@ -11,5 +11,5 @@ public interface DiagnosticReportDao { Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit); String getTestNameForLabReports(Obs obs); - Map getAllOrderedTestUploads(List visitList); + Map> getAllOrderedTestUploads(String patientUUID,Visit visit); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java index 1de0a156..c4306aab 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -55,11 +55,13 @@ public DiagnosticReportDaoImpl(PersonService personService, ObsService obsServic } - private List getAllObsForDiagnosticReports(String patientUUID) { + private List getAllObsForDiagnosticReports(String patientUUID, Boolean linkedWithOrder) { Person person = personService.getPersonByUuid(patientUUID); Concept concept = conceptService.getConcept("LAB_REPORT"); - List obs = obsService.getObservationsByPersonAndConcept(person,concept).stream().filter(o -> o.getOrder() == null).collect(Collectors.toList()); - return obs; + List obs = obsService.getObservationsByPersonAndConcept(person,concept); + if(linkedWithOrder) + return obs.stream().filter(o -> o.getOrder() != null).collect(Collectors.toList()); + return obs.stream().filter(o -> o.getOrder() == null).collect(Collectors.toList()); } @Override @@ -73,7 +75,7 @@ public String getTestNameForLabReports(Obs obs){ @Override public Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit){ Map> labReportsMap = new HashMap<>();; - List labReports = getAllObsForDiagnosticReports(patientUUID); + List labReports = getAllObsForDiagnosticReports(patientUUID,false); List encounters = encounterService.getEncountersByVisit(visit,false); List nextEncounters = encounterService.getEncountersByPatient(patientService.getPatientByUuid(patientUUID)).stream().filter(e -> encounters.get(encounters.size()-1).getId() < e.getId() @@ -97,17 +99,31 @@ public Map> getAllUnorderedUploadsForVisit(String patientUUI } } } + logger.warn("UNORDERED " + labReportsMap); return labReportsMap; } @Override - public Map getAllOrderedTestUploads(List visitList) { - Map documentObs = new HashMap<>(); - for (Visit visit : visitList) { - for (Obs o : encounterDao.GetAllObsForVisit(visit, LAB_RESULT, LAB_REPORT).stream().filter(o -> !o.getVoided()).collect(Collectors.toList())) { - documentObs.put(o.getOrder(), o); + public Map> getAllOrderedTestUploads(String patientUuid,Visit visit) { + Map> documentObs = new HashMap<>(); + List obsList = getAllObsForDiagnosticReports(patientUuid,true); + List encounters = encounterService.getEncountersByVisit(visit,false); + logger.warn("ENCOUNERS " + encounters); + + for (Obs obs : obsList) { + Encounter orderEncounter = obs.getOrder().getEncounter(); + if(encounters.contains(orderEncounter)) { + if (documentObs.containsKey(orderEncounter)) { + documentObs.get(orderEncounter).add(obs); + } else { + documentObs.put(orderEncounter, new ArrayList() {{ + add(obs); + }}); + } } } + logger.info("ORDERED " + documentObs); + logger.warn("ORDERED " + documentObs); return documentObs; } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 8a98fcef..b959def6 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -1,5 +1,7 @@ package org.bahmni.module.hip.web.service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.bahmnicore.dao.OrderDao; import org.bahmni.module.hip.api.dao.DiagnosticReportDao; import org.bahmni.module.hip.api.dao.EncounterDao; @@ -44,6 +46,7 @@ public class DiagnosticReportService { private static final String RADIOLOGY_TYPE = "RADIOLOGY"; private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; private static final String DOCUMENT_TYPE = "Document"; + private static Logger logger = LogManager.getLogger(DiagnosticReportService.class); private LabOrderResultsService labOrderResultsService; @@ -125,18 +128,15 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } - private Map getLabUploadsMap(Map orderedTestUploads, Map> unorderedUploads, Order order) { - Map labReports = new HashMap() {{ - if (orderedTestUploads.get(order) != null) { - Obs o = orderedTestUploads.get(order); - put(o,diagnosticReportDao.getTestNameForLabReports(o)); - } - }}; + private Map getLabUploadsMap(Map> orderedTestUploads, Map> unorderedUploads, Order order) { Encounter encounter = order.getEncounter(); + Map labReports = new HashMap<>(); + putAllObsIntoMap(orderedTestUploads.get(encounter),labReports); if(unorderedUploads.containsKey(encounter)) { putAllObsIntoMap(unorderedUploads.get(encounter),labReports); unorderedUploads.remove(encounter); } + logger.warn("UPLOAD MAP " + labReports); return labReports; } @@ -148,7 +148,7 @@ private void putAllObsIntoMap(List obs,Map labReports) { private List getLabResults(Patient patient, List visitList) { - Map orderedTestUploads = diagnosticReportDao.getAllOrderedTestUploads(visitList); + Map> orderedTestUploads = diagnosticReportDao.getAllOrderedTestUploads(patient.getUuid(), visitList.size() != 0 ? visitList.get(0) : null); Map> unorderedUploads = diagnosticReportDao.getAllUnorderedUploadsForVisit(patient.getUuid(), visitList.size() != 0 ? visitList.get(0) : null); LabOrderResults results = labOrderResultsService.getAll(patient, visitList, Integer.MAX_VALUE); From 50d0f9277933cb7f6861cbccc5223e3c3df69d9d Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 25 Aug 2022 17:05:58 +0530 Subject: [PATCH 218/264] BAH-1900 | fix. null pointer exception --- .../bahmni/module/hip/web/service/DiagnosticReportService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index b959def6..d145c0e7 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -131,7 +131,7 @@ public HashMap> getAllObservationsForPrograms(Date fromDate private Map getLabUploadsMap(Map> orderedTestUploads, Map> unorderedUploads, Order order) { Encounter encounter = order.getEncounter(); Map labReports = new HashMap<>(); - putAllObsIntoMap(orderedTestUploads.get(encounter),labReports); + if(orderedTestUploads.containsKey(encounter)) putAllObsIntoMap(orderedTestUploads.get(encounter),labReports); if(unorderedUploads.containsKey(encounter)) { putAllObsIntoMap(unorderedUploads.get(encounter),labReports); unorderedUploads.remove(encounter); From 8f1b3cc02d3e6326aae93ec6817e5c3216f0255a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 12 Aug 2022 12:49:54 +0530 Subject: [PATCH 219/264] BAH-2150 | Updated fhir2 version to 1.5.0 --- omod/pom.xml | 2 +- omod/src/main/resources/config.xml | 2 +- pom.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index 176b7450..f8ab964c 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -67,7 +67,7 @@ org.openmrs.module fhir2-omod - 1.4.0-SNAPSHOT + 1.5.0 provided diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 918f369d..81f0fe08 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -22,7 +22,7 @@ org.openmrs.module.webservices.rest - org.openmrs.module.fhir2 + org.openmrs.module.fhir2 org.openmrs.module.emrapi org.bahmni.module.bahmnicore diff --git a/pom.xml b/pom.xml index cecfbf92..fb1d6e2e 100644 --- a/pom.xml +++ b/pom.xml @@ -64,13 +64,13 @@ org.openmrs.module fhir2-api-2.1 - 1.4.0-SNAPSHOT + 1.5.0 provided org.openmrs.module fhir2-api - 1.4.0-SNAPSHOT + 1.5.0 provided From 6db42b445abc609d3e444e5fed6d35d01c4258cd Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 29 Aug 2022 12:57:37 +0530 Subject: [PATCH 220/264] BAH-1900 | Add. boundry condition --- .../api/dao/impl/DiagnosticReportDaoImpl.java | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java index c4306aab..1d76662b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -77,24 +77,26 @@ public Map> getAllUnorderedUploadsForVisit(String patientUUI Map> labReportsMap = new HashMap<>();; List labReports = getAllObsForDiagnosticReports(patientUUID,false); List encounters = encounterService.getEncountersByVisit(visit,false); - List nextEncounters = encounterService.getEncountersByPatient(patientService.getPatientByUuid(patientUUID)).stream().filter(e -> - encounters.get(encounters.size()-1).getId() < e.getId() - ).collect(Collectors.toList()); - for (Obs obs: labReports) { - for (Encounter encounter: encounters) { - Encounter nextEncounter; - Date nextEncounterDate = nextEncounters.size() != 0 ? nextEncounters.get(0).getDateCreated() : new Date(); - if(encounters.indexOf(encounter) < (encounters.size() - 1)){ - nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter)+1).getId()); - nextEncounterDate = nextEncounter.getDateCreated(); - } - if(obs.getDateCreated().equals(encounter.getDateCreated()) || (obs.getDateCreated().before(nextEncounterDate) && obs.getDateCreated().after(encounter.getDateCreated()))){ - if (labReportsMap.containsKey(encounter)) { - labReportsMap.get(encounter).add(obs); - } else { - labReportsMap.put(encounter, new ArrayList() {{ - add(obs); - }}); + if(encounters.size() != 0) { + List nextEncounters = encounterService.getEncountersByPatient(patientService.getPatientByUuid(patientUUID)).stream().filter(e -> + encounters.get(encounters.size() - 1).getId() < e.getId() + ).collect(Collectors.toList()); + for (Obs obs : labReports) { + for (Encounter encounter : encounters) { + Encounter nextEncounter; + Date nextEncounterDate = nextEncounters.size() != 0 ? nextEncounters.get(0).getDateCreated() : new Date(); + if (encounters.indexOf(encounter) < (encounters.size() - 1)) { + nextEncounter = encounterService.getEncounter(encounters.get(encounters.indexOf(encounter) + 1).getId()); + nextEncounterDate = nextEncounter.getDateCreated(); + } + if (obs.getDateCreated().equals(encounter.getDateCreated()) || (obs.getDateCreated().before(nextEncounterDate) && obs.getDateCreated().after(encounter.getDateCreated()))) { + if (labReportsMap.containsKey(encounter)) { + labReportsMap.get(encounter).add(obs); + } else { + labReportsMap.put(encounter, new ArrayList() {{ + add(obs); + }}); + } } } } From cff9fb3597b5ff93cd0730c08df1e3a16f20c553 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 30 Aug 2022 12:28:08 +0530 Subject: [PATCH 221/264] BAH-1900 | Refactor. diagnostic report list in bundle --- .../module/hip/web/model/FhirLabResult.java | 74 ++++++++++--------- .../hip/web/model/OpenMrsLabResults.java | 10 +-- .../web/service/DiagnosticReportService.java | 50 +++++-------- 3 files changed, 64 insertions(+), 70 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index b3d29ed6..0d66ad68 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -43,11 +43,11 @@ public class FhirLabResult { private final Patient patient; private final Encounter encounter; private final Date visitTime; - private final DiagnosticReport report; + private final List report; private final List results; private final List practitioners; - public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date visitTime, DiagnosticReport report, List results, List practitioners) { + public FhirLabResult(Patient patient, String panelName, Encounter encounter, Date visitTime, List report, List results, List practitioners) { this.patient = patient; this.encounter = encounter; this.visitTime = visitTime; @@ -73,38 +73,41 @@ public Bundle bundleLabResults (String webUrl, FHIRResourceMapper fhirResourceMa } public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, FHIRResourceMapper fhirResourceMapper) { - Patient patient = fhirResourceMapper.mapToPatient(labresult.getPatient()); + List reportList = new ArrayList<>(); List practitioners = labresult.getEncounterProviders().stream().map(fhirResourceMapper::mapToPractitioner).collect(Collectors.toList()); - DiagnosticReport reports = new DiagnosticReport(); - LabOrderResult firstresult = labresult.getLabOrderResults().size() != 0 ? labresult.getLabOrderResults().get(0) : null; + for(Map.Entry, List> report : labresult.getLabOrderResults().entrySet()) { + Patient patient = fhirResourceMapper.mapToPatient(labresult.getPatient()); + DiagnosticReport reports = new DiagnosticReport(); + LabOrderResult firstresult = report.getValue().size() != 0 ? report.getValue().get(0) : null; + report.getKey().entrySet().stream().map(entry -> { + reports.setCode(new CodeableConcept().setText(entry.getValue()).addCoding(new Coding().setDisplay(entry.getValue()))); + try { + reports.setPresentedForm(getAttachments(entry.getKey(),entry.getValue())); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } ).collect(Collectors.toList()); - String panelName = null; - for(Map.Entry report : labresult.getObservationsWithTestName().entrySet()){ - if(panelName == null) panelName = report.getValue(); - else panelName = panelName + " , " + report.getValue(); - } + reports.setId(firstresult != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); - reports.setId(firstresult != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); - reports.setCode(new CodeableConcept().setText(panelName).addCoding(new Coding().setDisplay(panelName))); - reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); - reports.setSubject(FHIRUtils.getReferenceToResource(patient)); - reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); - try { - reports.setPresentedForm(getAttachments(labresult.getObservationsWithTestName())); - } catch (IOException e) { - e.printStackTrace(); - } + reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); + reports.setSubject(FHIRUtils.getReferenceToResource(patient)); + reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); - List results = new ArrayList<>(); - labresult.getLabOrderResults().stream().forEach( result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results) ); + List results = new ArrayList<>(); + report.getValue().stream().forEach(result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results)); + reportList.add(reports); + + } - FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient() ), panelName, + FhirLabResult fhirLabResult = new FhirLabResult(fhirResourceMapper.mapToPatient( labresult.getPatient()), null, fhirResourceMapper.mapToEncounter( labresult.getEncounter() ), - labresult.getEncounter().getVisit().getStartDatetime(), reports, results, practitioners); + labresult.getEncounter().getVisit().getStartDatetime(), reportList, new ArrayList<>(), practitioners); return fhirLabResult; } @@ -141,7 +144,10 @@ private Composition compositionFrom(String webURL) { .setTitle("Diagnostic Report") .setCode(FHIRUtils.getDiagnosticReportType()); - compositionSection.addEntry(FHIRUtils.getReferenceToResource(report)); + report.stream() + .map(FHIRUtils::getReferenceToResource) + .forEach(compositionSection::addEntry); + return composition; } @@ -158,16 +164,16 @@ private Composition initializeComposition(Date visitTimestamp, String webURL) { return composition; } - private static List getAttachments(Map obs) throws IOException { + private static List getAttachments(Obs obs,String testNmae) throws IOException { List attachments = new ArrayList<>(); - for (Map.Entry o: obs.entrySet()) { - Attachment attachment = new Attachment(); - attachment.setContentType(getTypeOfTheObsDocument(o.getKey().getValueText())); - byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + o.getKey().getValueText()).toPath()); - attachment.setData(fileContent); - attachment.setTitle("LAB REPORT : " + o.getValue()); - attachments.add(attachment); - } + + Attachment attachment = new Attachment(); + attachment.setContentType(getTypeOfTheObsDocument(obs.getValueText())); + byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + obs.getValueText()).toPath()); + attachment.setData(fileContent); + attachment.setTitle("LAB REPORT : " + testNmae); + attachments.add(attachment); + return attachments; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java index 658e93c6..046b1bfb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java @@ -17,26 +17,24 @@ @Getter public class OpenMrsLabResults { private Encounter encounter; - private List labOrderResults; + private Map, List> labOrderResults; private Patient patient; private final Set encounterProviders; - private final Map observationsWithTestName; - public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, List labOrderResults, Map observationsWithTestName) { + public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, Map, List> labOrderResults) { this.encounter = encounter; this.patient = patient; this.labOrderResults = labOrderResults; this.encounterProviders = encounter.getEncounterProviders(); - this.observationsWithTestName = observationsWithTestName; } - public static List from(Map> labOrderResultsMap, Map> labReportDocuments) { + public static List from(Map> labOrderResultsMap, Map, List> labReportDocuments) { return labOrderResultsMap .entrySet() .stream() - .map(entry -> new OpenMrsLabResults(entry.getKey().getEncounter(), entry.getKey().getPatient(), entry.getValue(),labReportDocuments.get(entry))) + .map(entry -> new OpenMrsLabResults(entry.getKey().getEncounter(), entry.getKey().getPatient(),labReportDocuments)) .collect(Collectors.toList()); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index d145c0e7..a22ec2fc 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -128,17 +128,6 @@ public HashMap> getAllObservationsForPrograms(Date fromDate return encounterListMap; } - private Map getLabUploadsMap(Map> orderedTestUploads, Map> unorderedUploads, Order order) { - Encounter encounter = order.getEncounter(); - Map labReports = new HashMap<>(); - if(orderedTestUploads.containsKey(encounter)) putAllObsIntoMap(orderedTestUploads.get(encounter),labReports); - if(unorderedUploads.containsKey(encounter)) { - putAllObsIntoMap(unorderedUploads.get(encounter),labReports); - unorderedUploads.remove(encounter); - } - logger.warn("UPLOAD MAP " + labReports); - return labReports; - } private void putAllObsIntoMap(List obs,Map labReports) { for (Obs o: obs) { @@ -154,26 +143,27 @@ private List getLabResults(Patient patient, List LabOrderResults results = labOrderResultsService.getAll(patient, visitList, Integer.MAX_VALUE); Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); - List orders = orderDao.getAllOrdersForVisits(new OrderType(4), visitList); - - List labResults = groupedByOrderUUID.entrySet().stream().map(entry -> { - Optional orderForUuid = orders - .stream() - .filter(order -> order.getUuid().equals(entry.getKey())) - .findFirst(); - if (orderForUuid.isPresent()) { - return new OpenMrsLabResults(orderForUuid.get().getEncounter(), orderForUuid.get().getPatient(), entry.getValue(), - getLabUploadsMap(orderedTestUploads,unorderedUploads,orderForUuid.get())); + List labResults = new ArrayList<>(); + Map, List> labRecordsMap = new HashMap<>(); + for (Map.Entry> map : orderedTestUploads.entrySet()) { + for (Obs obs: map.getValue()) { + labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},groupedByOrderUUID.get(obs.getOrder().getUuid())); } - else return null; - } ).filter(Objects::nonNull).collect(Collectors.toList()); - - - labResults.addAll(unorderedUploads.entrySet().stream().map(entry -> { - Map labReports = new HashMap<>(); - putAllObsIntoMap(entry.getValue(),labReports); - return new OpenMrsLabResults(entry.getKey(), entry.getKey().getPatient(), new ArrayList<>(),labReports); - } ).collect(Collectors.toList())); + if(unorderedUploads.containsKey(map.getKey())) + { + for (Obs obs: unorderedUploads.get(map.getKey())) { + labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); + } + unorderedUploads.remove(map.getKey()); + } + labResults.add(new OpenMrsLabResults(map.getKey(),map.getKey().getPatient(),labRecordsMap)); + } + for (Map.Entry> map : unorderedUploads.entrySet()) { + for (Obs obs: map.getValue()) { + labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); + } + labResults.add(new OpenMrsLabResults(map.getKey(),map.getKey().getPatient(),labRecordsMap)); + } List bundles = labResults.stream().map(fhirBundledDiagnosticReportBuilder::fhirBundleResponseFor).collect(Collectors.toList()); return bundles; From 8ec176b1e90615f33e8bf3ca3b6d51ada5c1a42a Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 30 Aug 2022 18:50:08 +0530 Subject: [PATCH 222/264] BAH-1900 | Add. practitioner in lab result bundle --- .../java/org/bahmni/module/hip/web/model/FhirLabResult.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 0d66ad68..126bab9f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -136,6 +136,9 @@ private Composition compositionFrom(String webURL) { Composition.SectionComponent compositionSection = composition.addSection(); Reference patientReference = FHIRUtils.getReferenceToResource(patient); + practitioners + .forEach(practitioner -> composition + .addAuthor().setResource(practitioner).setDisplay(FHIRUtils.getDisplay(practitioner))); composition .setEncounter(FHIRUtils.getReferenceToResource(encounter)) .setSubject(patientReference); From 9aa6b620da2d89a8cf48e9e68d34fb4971c5e1a6 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 2 Sep 2022 12:33:08 +0530 Subject: [PATCH 223/264] BAH-1900 | Refactor. extacted into a methods to avoid duplicates --- .../web/service/DiagnosticReportService.java | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index a22ec2fc..f3a6bab2 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -129,9 +129,9 @@ public HashMap> getAllObservationsForPrograms(Date fromDate } - private void putAllObsIntoMap(List obs,Map labReports) { - for (Obs o: obs) { - labReports.put(o, diagnosticReportDao.getTestNameForLabReports(o)); + private void putAllUnOrderedObsUploadsIntoMap(List observations, Map, List> labRecordsMap) { + for (Obs obs: observations) { + labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); } } @@ -145,23 +145,21 @@ private List getLabResults(Patient patient, List List labResults = new ArrayList<>(); Map, List> labRecordsMap = new HashMap<>(); + for (Map.Entry> map : orderedTestUploads.entrySet()) { for (Obs obs: map.getValue()) { labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},groupedByOrderUUID.get(obs.getOrder().getUuid())); } if(unorderedUploads.containsKey(map.getKey())) { - for (Obs obs: unorderedUploads.get(map.getKey())) { - labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); - } + putAllUnOrderedObsUploadsIntoMap(unorderedUploads.get(map.getKey()),labRecordsMap); unorderedUploads.remove(map.getKey()); } labResults.add(new OpenMrsLabResults(map.getKey(),map.getKey().getPatient(),labRecordsMap)); } + for (Map.Entry> map : unorderedUploads.entrySet()) { - for (Obs obs: map.getValue()) { - labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); - } + putAllUnOrderedObsUploadsIntoMap(unorderedUploads.get(map.getKey()),labRecordsMap); labResults.add(new OpenMrsLabResults(map.getKey(),map.getKey().getPatient(),labRecordsMap)); } @@ -175,7 +173,7 @@ public List getLabResultsForVisits(String patientUuid, S Visit visit = hipVisitDao.getPatientVisit(patient,visittype,visitStartDate); List visits = new ArrayList<>(); - visits.add(visit); + visits.add(visit); return getLabResults(patient, visits); } From e4883d8fd7f00539d8e1c36af192cd69d44f23c7 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 2 Sep 2022 13:29:10 +0530 Subject: [PATCH 224/264] BAH-1900 | Refactor. diagnostic report list in bundle --- .../module/hip/web/model/FhirLabResult.java | 24 ++++++++----------- .../hip/web/model/OpenMrsLabResults.java | 6 ++--- .../web/service/DiagnosticReportService.java | 8 +++---- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 126bab9f..84c7ee00 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -76,28 +76,24 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F List reportList = new ArrayList<>(); List practitioners = labresult.getEncounterProviders().stream().map(fhirResourceMapper::mapToPractitioner).collect(Collectors.toList()); - for(Map.Entry, List> report : labresult.getLabOrderResults().entrySet()) { - Patient patient = fhirResourceMapper.mapToPatient(labresult.getPatient()); + Patient patient = fhirResourceMapper.mapToPatient(labresult.getPatient()); + + for(Map.Entry> report : labresult.getLabOrderResults().entrySet()) { DiagnosticReport reports = new DiagnosticReport(); LabOrderResult firstresult = report.getValue().size() != 0 ? report.getValue().get(0) : null; - report.getKey().entrySet().stream().map(entry -> { - reports.setCode(new CodeableConcept().setText(entry.getValue()).addCoding(new Coding().setDisplay(entry.getValue()))); - try { - reports.setPresentedForm(getAttachments(entry.getKey(),entry.getValue())); - } catch (IOException e) { - e.printStackTrace(); - } - return null; - } ).collect(Collectors.toList()); + String testName = report.getKey().getObsGroup().getConcept().getName().getName(); + reports.setCode(new CodeableConcept().setText(testName).addCoding(new Coding().setDisplay(testName))); + try { + reports.setPresentedForm(getAttachments(report.getKey(),testName)); + } catch (IOException e) { + e.printStackTrace(); + } reports.setId(firstresult != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); - reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); reports.setSubject(FHIRUtils.getReferenceToResource(patient)); reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); - - List results = new ArrayList<>(); report.getValue().stream().forEach(result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results)); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java index 046b1bfb..0bf30850 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/OpenMrsLabResults.java @@ -17,12 +17,12 @@ @Getter public class OpenMrsLabResults { private Encounter encounter; - private Map, List> labOrderResults; + private Map> labOrderResults; private Patient patient; private final Set encounterProviders; - public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, Map, List> labOrderResults) { + public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, Map> labOrderResults) { this.encounter = encounter; this.patient = patient; this.labOrderResults = labOrderResults; @@ -30,7 +30,7 @@ public OpenMrsLabResults(@NotEmpty Encounter encounter, Patient patient, Map from(Map> labOrderResultsMap, Map, List> labReportDocuments) { + public static List from(Map> labOrderResultsMap, Map> labReportDocuments) { return labOrderResultsMap .entrySet() .stream() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index f3a6bab2..c22f8e56 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -129,9 +129,9 @@ public HashMap> getAllObservationsForPrograms(Date fromDate } - private void putAllUnOrderedObsUploadsIntoMap(List observations, Map, List> labRecordsMap) { + private void putAllUnOrderedObsUploadsIntoMap(List observations, Map> labRecordsMap) { for (Obs obs: observations) { - labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},new ArrayList<>()); + labRecordsMap.put(obs,new ArrayList<>()); } } @@ -144,11 +144,11 @@ private List getLabResults(Patient patient, List Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); List labResults = new ArrayList<>(); - Map, List> labRecordsMap = new HashMap<>(); + Map> labRecordsMap = new HashMap<>(); for (Map.Entry> map : orderedTestUploads.entrySet()) { for (Obs obs: map.getValue()) { - labRecordsMap.put(new HashMap() {{ put(obs,diagnosticReportDao.getTestNameForLabReports(obs));}},groupedByOrderUUID.get(obs.getOrder().getUuid())); + labRecordsMap.put(obs,groupedByOrderUUID.get(obs.getOrder().getUuid())); } if(unorderedUploads.containsKey(map.getKey())) { From 9a8810343040737ff2867276fc2ded2c7dfa8c00 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 2 Sep 2022 16:15:27 +0530 Subject: [PATCH 225/264] BAH-1900 | Refactor. logs and unused imports --- .github/workflows/build_and_upload.yml | 1 - .../bahmni/module/hip/api/dao/Constants.java | 1 + .../hip/api/dao/DiagnosticReportDao.java | 1 - .../api/dao/impl/DiagnosticReportDaoImpl.java | 34 +++++-------------- .../hip/web/model/FhirDiagnosticReport.java | 1 - .../module/hip/web/model/FhirLabResult.java | 24 +------------ .../module/hip/web/service/Constants.java | 17 +++++----- .../web/service/DiagnosticReportService.java | 7 ---- .../hip/web/service/FHIRResourceMapper.java | 32 +++-------------- .../module/hip/web/service/FHIRUtils.java | 24 +++++++++++++ 10 files changed, 49 insertions(+), 93 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index 5cd44bf8..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,7 +7,6 @@ on: push: branches: - master - - BAH-1900 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java index 11c1f150..32ade463 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java @@ -18,4 +18,5 @@ public class Constants { public static final String DOCUMENT_TYPE = "Document"; public static final String CODED_DIAGNOSIS = "Coded Diagnosis"; public static final String NON_CODED_DIAGNOSIS = "Non-coded Diagnosis"; + public static final String LAB_REPORT = "LAB_REPORT"; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java index 8cbd48c7..60ae92db 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/DiagnosticReportDao.java @@ -10,6 +10,5 @@ public interface DiagnosticReportDao { Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit); - String getTestNameForLabReports(Obs obs); Map> getAllOrderedTestUploads(String patientUUID,Visit visit); } \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java index 1d76662b..2ddb8c06 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -1,15 +1,11 @@ package org.bahmni.module.hip.api.dao.impl; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.api.dao.DiagnosticReportDao; -import org.bahmni.module.hip.api.dao.EncounterDao; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.openmrs.Concept; import org.openmrs.Encounter; import org.openmrs.Obs; -import org.openmrs.Order; import org.openmrs.Person; import org.openmrs.Visit; import org.openmrs.api.ConceptService; @@ -20,9 +16,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; +import static org.bahmni.module.hip.api.dao.Constants.LAB_REPORT; + @Repository public class DiagnosticReportDaoImpl implements DiagnosticReportDao { @@ -32,24 +34,18 @@ public class DiagnosticReportDaoImpl implements DiagnosticReportDao { private ObsService obsService; private ConceptService conceptService; private EncounterService encounterService; - private EncounterDao encounterDao; private PatientService patientService; - private static Logger logger = LogManager.getLogger(DiagnosticReportDaoImpl.class); - private static final String LAB_REPORT = "LAB_REPORT"; - private static final String LAB_RESULT = "LAB_RESULT"; - @Autowired public DiagnosticReportDaoImpl(PersonService personService, ObsService obsService, ConceptService conceptService, EncounterService encounterService, - EncounterDao encounterDao, SessionFactory sessionFactory, PatientService patientService) + SessionFactory sessionFactory, PatientService patientService) { this.obsService = obsService; this.personService = personService; this.conceptService = conceptService; this.encounterService = encounterService; - this.encounterDao = encounterDao; this.sessionFactory = sessionFactory; this.patientService = patientService; } @@ -57,21 +53,13 @@ public DiagnosticReportDaoImpl(PersonService personService, ObsService obsServic private List getAllObsForDiagnosticReports(String patientUUID, Boolean linkedWithOrder) { Person person = personService.getPersonByUuid(patientUUID); - Concept concept = conceptService.getConcept("LAB_REPORT"); + Concept concept = conceptService.getConcept(LAB_REPORT); List obs = obsService.getObservationsByPersonAndConcept(person,concept); if(linkedWithOrder) return obs.stream().filter(o -> o.getOrder() != null).collect(Collectors.toList()); return obs.stream().filter(o -> o.getOrder() == null).collect(Collectors.toList()); } - @Override - public String getTestNameForLabReports(Obs obs){ - Query query = this.sessionFactory.getCurrentSession().createSQLQuery("select concept_id from fhir_diagnostic_report where date_created = :obsDateTime ;"); - query.setParameter("obsDateTime", obs.getDateCreated()); - - return query.list().size() != 0 ? conceptService.getConcept(query.list().get(0).hashCode()).getName().getName() : null; - } - @Override public Map> getAllUnorderedUploadsForVisit(String patientUUID, Visit visit){ Map> labReportsMap = new HashMap<>();; @@ -101,7 +89,6 @@ public Map> getAllUnorderedUploadsForVisit(String patientUUI } } } - logger.warn("UNORDERED " + labReportsMap); return labReportsMap; } @@ -110,7 +97,6 @@ public Map> getAllOrderedTestUploads(String patientUuid,Visi Map> documentObs = new HashMap<>(); List obsList = getAllObsForDiagnosticReports(patientUuid,true); List encounters = encounterService.getEncountersByVisit(visit,false); - logger.warn("ENCOUNERS " + encounters); for (Obs obs : obsList) { Encounter orderEncounter = obs.getOrder().getEncounter(); @@ -124,8 +110,6 @@ public Map> getAllOrderedTestUploads(String patientUuid,Visi } } } - logger.info("ORDERED " + documentObs); - logger.warn("ORDERED " + documentObs); return documentObs; } } \ No newline at end of file diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java index 1e5446fd..75fbd7f4 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java @@ -1,6 +1,5 @@ package org.bahmni.module.hip.web.model; -import org.bahmni.module.hip.web.service.Constants; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.Bundle; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 84c7ee00..d07b5769 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -28,15 +28,7 @@ import java.util.UUID; import java.util.stream.Collectors; -import static org.bahmni.module.hip.web.service.Constants.GIF; -import static org.bahmni.module.hip.web.service.Constants.IMAGE; -import static org.bahmni.module.hip.web.service.Constants.JPEG; -import static org.bahmni.module.hip.web.service.Constants.JPG; -import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_IMAGE_JPEG; -import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_PDF; import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENTS_PATH; -import static org.bahmni.module.hip.web.service.Constants.PDF; -import static org.bahmni.module.hip.web.service.Constants.PNG; public class FhirLabResult { @@ -167,7 +159,7 @@ private static List getAttachments(Obs obs,String testNmae) throws I List attachments = new ArrayList<>(); Attachment attachment = new Attachment(); - attachment.setContentType(getTypeOfTheObsDocument(obs.getValueText())); + attachment.setContentType(FHIRUtils.getTypeOfTheObsDocument(obs.getValueText())); byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + obs.getValueText()).toPath()); attachment.setData(fileContent); attachment.setTitle("LAB REPORT : " + testNmae); @@ -175,18 +167,4 @@ private static List getAttachments(Obs obs,String testNmae) throws I return attachments; } - - private static String getTypeOfTheObsDocument(String valueText) { - if (valueText == null) return ""; - String extension = valueText.substring(valueText.indexOf('.') + 1); - if (extension.compareTo(JPEG) == 0 || extension.compareTo(JPG) == 0) { - return MIMETYPE_IMAGE_JPEG; - } else if (extension.compareTo(PNG) == 0 || extension.compareTo(GIF) == 0) { - return IMAGE + extension; - } else if (extension.compareTo(PDF) == 0) { - return MIMETYPE_PDF; - } else { - return ""; - } - } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 4ae57290..28aaf170 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -20,16 +20,17 @@ public class Constants { static final String FHIR_ENC_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode"; + public static final String PATIENT_DOCUMENTS_PATH = "/home/bahmni/document_images/"; - public static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; - public static final String IMAGE = "image/"; - public static final String JPEG = "jpeg"; - public static final String JPG = "jpg"; - public static final String PNG = "png"; - public static final String GIF = "gif"; - public static final String PDF = "pdf"; - public static final String MIMETYPE_PDF = "application/pdf"; + static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; + static final String IMAGE = "image/"; + static final String JPEG = "jpeg"; + static final String JPG = "jpg"; + static final String PNG = "png"; + static final String GIF = "gif"; + static final String PDF = "pdf"; + static final String MIMETYPE_PDF = "application/pdf"; public static final String RADIOLOGY_TYPE = "6"; public static final String PATIENT_DOCUMENT_TYPE = "9"; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index c22f8e56..447a07a5 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.service; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bahmni.module.bahmnicore.dao.OrderDao; import org.bahmni.module.hip.api.dao.DiagnosticReportDao; import org.bahmni.module.hip.api.dao.EncounterDao; @@ -12,8 +10,6 @@ import org.bahmni.module.hip.web.model.OpenMrsLabResults; import org.openmrs.Encounter; import org.openmrs.Obs; -import org.openmrs.Order; -import org.openmrs.OrderType; import org.openmrs.Patient; import org.openmrs.Visit; import org.openmrs.api.EncounterService; @@ -29,8 +25,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Objects; -import java.util.Optional; import java.util.stream.Collectors; @Service @@ -46,7 +40,6 @@ public class DiagnosticReportService { private static final String RADIOLOGY_TYPE = "RADIOLOGY"; private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; private static final String DOCUMENT_TYPE = "Document"; - private static Logger logger = LogManager.getLogger(DiagnosticReportService.class); private LabOrderResultsService labOrderResultsService; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 479af63e..3bcf5701 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -34,27 +34,19 @@ import org.springframework.stereotype.Service; import java.io.File; -import java.nio.file.Files; import java.io.IOException; -import java.util.HashSet; -import java.util.Set; +import java.nio.file.Files; +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; -import java.util.ArrayList; import java.util.Objects; +import java.util.Set; import static org.bahmni.module.hip.web.service.Constants.DOCUMENT_TYPE; -import static org.bahmni.module.hip.web.service.Constants.GIF; -import static org.bahmni.module.hip.web.service.Constants.IMAGE; -import static org.bahmni.module.hip.web.service.Constants.JPEG; -import static org.bahmni.module.hip.web.service.Constants.JPG; -import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_IMAGE_JPEG; -import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_PDF; import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENT; import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENTS_PATH; import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENT_TYPE; -import static org.bahmni.module.hip.web.service.Constants.PDF; -import static org.bahmni.module.hip.web.service.Constants.PNG; import static org.bahmni.module.hip.web.service.Constants.RADIOLOGY_REPORT; import static org.bahmni.module.hip.web.service.Constants.RADIOLOGY_TYPE; @@ -199,7 +191,7 @@ private List getAttachments(Obs obs) throws IOException { for(Obs obs1 : obsList){ if(obs1.getConcept().getName().getName().equals(DOCUMENT_TYPE)){ valueText.append(obs1.getValueText()); - contentType.append(getTypeOfTheObsDocument(obs1.getValueText())); + contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs1.getValueText())); } } attachment.setContentType(contentType.toString()); @@ -245,20 +237,6 @@ public ServiceRequest mapToOrder(Order order){ return serviceRequest; } - private String getTypeOfTheObsDocument(String valueText) { - if (valueText == null) return ""; - String extension = valueText.substring(valueText.indexOf('.') + 1); - if (extension.compareTo(JPEG) == 0 || extension.compareTo(JPG) == 0) { - return MIMETYPE_IMAGE_JPEG; - } else if (extension.compareTo(PNG) == 0 || extension.compareTo(GIF) == 0) { - return IMAGE + extension; - } else if (extension.compareTo(PDF) == 0) { - return MIMETYPE_PDF; - } else { - return ""; - } - } - public Patient mapToPatient(org.openmrs.Patient emrPatient) { return patientTranslator.toFhirResource(emrPatient); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 8da6f27a..745b6447 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -16,6 +16,15 @@ import java.util.List; import java.util.Map; +import static org.bahmni.module.hip.web.service.Constants.GIF; +import static org.bahmni.module.hip.web.service.Constants.IMAGE; +import static org.bahmni.module.hip.web.service.Constants.JPEG; +import static org.bahmni.module.hip.web.service.Constants.JPG; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_IMAGE_JPEG; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_PDF; +import static org.bahmni.module.hip.web.service.Constants.PDF; +import static org.bahmni.module.hip.web.service.Constants.PNG; + public class FHIRUtils { private static Map genderMap = new HashMap() {{ put("M", Enumerations.AdministrativeGender.MALE); @@ -181,4 +190,19 @@ public static String getDisplay(Practitioner author) { return prefixAsSingleString.concat(" ").concat(author.getNameFirstRep().getText()); } } + + public static String getTypeOfTheObsDocument(String valueText) { + if (valueText == null) return ""; + String extension = valueText.substring(valueText.indexOf('.') + 1); + if (extension.compareTo(JPEG) == 0 || extension.compareTo(JPG) == 0) { + return MIMETYPE_IMAGE_JPEG; + } else if (extension.compareTo(PNG) == 0 || extension.compareTo(GIF) == 0) { + return IMAGE + extension; + } else if (extension.compareTo(PDF) == 0) { + return MIMETYPE_PDF; + } else { + return ""; + } + } + } From 42a9a6056fa3a501b3ec57680c2dd8f1a81f694e Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 14 Sep 2022 19:12:13 +0530 Subject: [PATCH 226/264] Refactor. boundry condition for lab result --- .../java/org/bahmni/module/hip/web/model/FhirLabResult.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index d07b5769..2630b7bd 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -72,7 +72,7 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F for(Map.Entry> report : labresult.getLabOrderResults().entrySet()) { DiagnosticReport reports = new DiagnosticReport(); - LabOrderResult firstresult = report.getValue().size() != 0 ? report.getValue().get(0) : null; + LabOrderResult firstresult = (report.getValue() != null && report.getValue().size() != 0) ? report.getValue().get(0) : new LabOrderResult(); String testName = report.getKey().getObsGroup().getConcept().getName().getName(); reports.setCode(new CodeableConcept().setText(testName).addCoding(new Coding().setDisplay(testName))); try { @@ -81,14 +81,14 @@ public static FhirLabResult fromOpenMrsLabResults(OpenMrsLabResults labresult, F e.printStackTrace(); } - reports.setId(firstresult != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); + reports.setId(firstresult.getOrderUuid() != null ? firstresult.getOrderUuid() : UUID.randomUUID().toString()); reports.setStatus(DiagnosticReport.DiagnosticReportStatus.FINAL); reports.setSubject(FHIRUtils.getReferenceToResource(patient)); reports.setResultsInterpreter(practitioners.stream().map(FHIRUtils::getReferenceToResource).collect(Collectors.toList())); List results = new ArrayList<>(); - report.getValue().stream().forEach(result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results)); + if(report.getValue() != null) report.getValue().stream().forEach(result -> FhirLabResult.mapToObsFromLabResult(result, patient, reports, results)); reportList.add(reports); } From 347a42e89bee03b79a9a26efde565585822b113f Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 16 Sep 2022 17:48:14 +0530 Subject: [PATCH 227/264] BAH-2152 | Created configuration for hardcoded values --- .../java/org/bahmni/module/hip/Config.java | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 api/src/main/java/org/bahmni/module/hip/Config.java diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java new file mode 100644 index 00000000..c9c05765 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -0,0 +1,47 @@ +package org.bahmni.module.hip; + +public enum Config { + + + PATIENT_DOCUMENTS_PATH("/home/bahmni/document_images/"), + ABHA_ADDRESS("ABHA Address"), + LOCATION("Bahmni Clinics"), + PHONE_NUMBER("phoneNumber"), + + //encounterType + CONSULTATION("Consultation"), + PATIENT_DOCUMENT("Patient Document"), + RADIOLOGY_TYPE( "RADIOLOGY"), + ORDER_TYPE("Order"), + + //concepts + DOCUMENT_TYPE("Document"), + RADIOLOGY_REPORT("Radiology Report"), + CHIEF_COMPLAINT( "Chief Complaint"), + PROCEDURE_NOTES( "Procedure Notes"), + DISCHARGE_SUMMARY( "Discharge Summary"), + CODED_DIAGNOSIS( "Coded Diagnosis"), + NON_CODED_DIAGNOSIS( "Non-coded Diagnosis"), + LAB_REPORT( "LAB_REPORT"), + RADIOLOGY_ORDER( "Radiology Order"), + LAB_ORDER( "Lab Order"), + + + PROP_HFR_ID("bahmniHip.healthFacilityRegistryId"), + PROP_HFR_NAME( "bahmniHip.healthFacilityName"), + PROP_HFR_SYSTEM( "bahmniHip.healthFacilitySystem"), + PROP_HFR_URL( "bahmniHip.healthFacilityUrl"); + + + private final String value; + + + Config(String val) { + value = val; + } + + public String getValue() { + return System.getenv().getOrDefault(name(),this.value); + } + +} From 77e33105e9033a5e391c15cef92a1ab1500b3497 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 16 Sep 2022 17:54:03 +0530 Subject: [PATCH 228/264] BAH-2152 | Refactor. to use values from Configuration --- .../bahmni/module/hip/api/dao/Constants.java | 14 ------------ .../hip/api/dao/impl/ConsultationDaoImpl.java | 19 +++++++--------- .../api/dao/impl/DiagnosticReportDaoImpl.java | 4 ++-- .../api/dao/impl/DischargeSummaryDaoImpl.java | 14 +++++------- .../hip/api/dao/impl/EncounterDaoImpl.java | 10 ++++----- .../api/dao/impl/ExistingPatientDaoImpl.java | 4 ++-- .../hip/api/dao/impl/OPConsultDaoImpl.java | 21 ++++++++---------- .../hip/web/model/FhirDiagnosticReport.java | 4 ++-- .../module/hip/web/model/FhirLabResult.java | 4 ++-- .../module/hip/web/service/Constants.java | 21 ------------------ .../web/service/DiagnosticReportService.java | 11 ++++------ .../web/service/ExistingPatientService.java | 16 ++++++-------- .../hip/web/service/FHIRResourceMapper.java | 22 +++++++------------ .../service/OrganizationContextService.java | 9 ++++---- 14 files changed, 59 insertions(+), 114 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java index 32ade463..a4eee283 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/Constants.java @@ -4,19 +4,5 @@ public class Constants { public static final String VISIT_TYPE = "VISIT_TYPE"; public static final String PROGRAM = "PROGRAM"; - - public static final String RADIOLOGY_ORDER = "Radiology Order"; - public static final String LAB_ORDER = "Lab Order"; public static final String ORDER_ACTION = "DISCONTINUE"; - - public static final String CONSULTATION = "Consultation"; - public static final String CHIEF_COMPLAINT = "Chief Complaint"; - public static final String PROCEDURE_NOTES = "Procedure Notes"; - public static final String DISCHARGE_SUMMARY = "Discharge Summary"; - public static final String RADIOLOGY_TYPE = "RADIOLOGY"; - public static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; - public static final String DOCUMENT_TYPE = "Document"; - public static final String CODED_DIAGNOSIS = "Coded Diagnosis"; - public static final String NON_CODED_DIAGNOSIS = "Non-coded Diagnosis"; - public static final String LAB_REPORT = "LAB_REPORT"; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index d5fd76ea..a06c8de1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.ConsultationDao; import org.bahmni.module.hip.api.dao.EncounterDao; import org.openmrs.Encounter; @@ -25,18 +26,14 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.bahmni.module.hip.api.dao.Constants.CHIEF_COMPLAINT; -import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; -import static org.bahmni.module.hip.api.dao.Constants.LAB_ORDER; import static org.bahmni.module.hip.api.dao.Constants.ORDER_ACTION; -import static org.bahmni.module.hip.api.dao.Constants.RADIOLOGY_ORDER; @Repository public class ConsultationDaoImpl implements ConsultationDao { public static final ArrayList ORDER_TYPES = new ArrayList() {{ - add(LAB_ORDER); - add(RADIOLOGY_ORDER); + add(Config.LAB_ORDER.getValue()); + add(Config.RADIOLOGY_ORDER.getValue()); }}; private final ProgramWorkflowService programWorkflowService; private final EpisodeService episodeService; @@ -55,7 +52,7 @@ public ConsultationDaoImpl(ObsService obsService, OrderService orderService, Pro @Override public List getChiefComplaints(Visit visit) { - List chiefComplaintObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION,CHIEF_COMPLAINT) + List chiefComplaintObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(),Config.CHIEF_COMPLAINT.getValue()) .stream().filter(o -> o.getValueCoded() != null && o.getConcept().getName().getLocalePreferred()) .collect(Collectors.toList()); return chiefComplaintObsMap; @@ -66,8 +63,8 @@ public List getChiefComplaintForProgram(String programName, Date fromDate, List obs = getAllObs(programName, fromDate, toDate, patient); List obsSet = new ArrayList<>(); for (Obs o : obs) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && Objects.equals(o.getConcept().getName().getName(), CHIEF_COMPLAINT) + if (Objects.equals(o.getEncounter().getEncounterType().getName(), Config.CONSULTATION.getValue()) + && Objects.equals(o.getConcept().getName().getName(), Config.CHIEF_COMPLAINT.getValue()) && o.getValueCoded() != null && o.getConcept().getName().getLocalePreferred()) { obsSet.add(o); @@ -94,7 +91,7 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie public List getPhysicalExamination(Visit visit) { final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; - List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION,null) + List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(),null) .stream().filter(o -> o.getValueCoded() == null && o.getObsGroup() == null && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) ) .collect(Collectors.toList()); @@ -135,7 +132,7 @@ public List getPhysicalExaminationForProgram(String programName, Date fromD List physicalExaminationObsMap = new ArrayList<>(); List obs = getAllObs(programName, fromDate, toDate, patient); for (Obs o : obs) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + if (Objects.equals(o.getEncounter().getEncounterType().getName(), Config.CONSULTATION.getValue()) && o.getValueCoded() == null && o.getConcept().getName().getLocalePreferred() && o.getObsGroup() == null diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java index 2ddb8c06..1c12c5f7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DiagnosticReportDaoImpl.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.DiagnosticReportDao; import org.hibernate.Query; import org.hibernate.SessionFactory; @@ -23,7 +24,6 @@ import java.util.Map; import java.util.stream.Collectors; -import static org.bahmni.module.hip.api.dao.Constants.LAB_REPORT; @Repository @@ -53,7 +53,7 @@ public DiagnosticReportDaoImpl(PersonService personService, ObsService obsServic private List getAllObsForDiagnosticReports(String patientUUID, Boolean linkedWithOrder) { Person person = personService.getPersonByUuid(patientUUID); - Concept concept = conceptService.getConcept(LAB_REPORT); + Concept concept = conceptService.getConcept(Config.LAB_REPORT.getValue()); List obs = obsService.getObservationsByPersonAndConcept(person,concept); if(linkedWithOrder) return obs.stream().filter(o -> o.getOrder() != null).collect(Collectors.toList()); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java index 26b84de7..4c4d7e82 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/DischargeSummaryDaoImpl.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.DischargeSummaryDao; import org.bahmni.module.hip.api.dao.EncounterDao; import org.openmrs.Encounter; @@ -22,9 +23,6 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; -import static org.bahmni.module.hip.api.dao.Constants.DISCHARGE_SUMMARY; -import static org.bahmni.module.hip.api.dao.Constants.PROCEDURE_NOTES; @Repository public class DischargeSummaryDaoImpl implements DischargeSummaryDao { @@ -44,7 +42,7 @@ public DischargeSummaryDaoImpl(ObsService obsService, ProgramWorkflowService pro @Override public List getCarePlan(Visit visit) { - List carePlanObs = encounterDao.GetAllObsForVisit(visit, CONSULTATION, DISCHARGE_SUMMARY).stream() + List carePlanObs = encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.DISCHARGE_SUMMARY.getValue()).stream() .filter(obs -> obs.getConcept().getName().getLocalePreferred()) .collect(Collectors.toList()); @@ -61,7 +59,7 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t Set encounterSet = episode.getEncounters(); for (Encounter encounter : encounterSet) { for (Obs o : encounter.getAllObs()) { - if (DISCHARGE_SUMMARY.equals(o.getConcept().getName().getName()) + if (Config.DISCHARGE_SUMMARY.getValue().equals(o.getConcept().getName().getName()) && o.getConcept().getName().getLocalePreferred()) { carePlanObs.add(o); } @@ -73,7 +71,7 @@ public List getCarePlanForProgram(String programName, Date fromDate, Date t @Override public List getProcedures(Visit visit) { - List proceduresObsMap = encounterDao.GetAllObsForVisit(visit,CONSULTATION, PROCEDURE_NOTES).stream() + List proceduresObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(), Config.PROCEDURE_NOTES.getValue()).stream() .filter(obs -> obs.getObsGroup() == null) .collect(Collectors.toList()); return proceduresObsMap; @@ -89,9 +87,9 @@ public List getProceduresForProgram(String programName, Date fromDate, Date Set encounterSet = episode.getEncounters(); for (Encounter encounter : encounterSet) { for (Obs o : encounter.getAllObs()) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + if (Objects.equals(o.getEncounter().getEncounterType().getName(), Config.CONSULTATION.getValue()) && o.getObsGroup() == null - && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + && Objects.equals(o.getConcept().getName().getName(), Config.PROCEDURE_NOTES.getValue()) ) { proceduresObsSet.add(o); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index 751339a1..79950796 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.EncounterDao; import org.hibernate.Query; import org.hibernate.SessionFactory; @@ -16,9 +17,6 @@ import java.util.Objects; import java.util.stream.Collectors; -import static org.bahmni.module.hip.api.dao.Constants.DOCUMENT_TYPE; -import static org.bahmni.module.hip.api.dao.Constants.PATIENT_DOCUMENT_TYPE; -import static org.bahmni.module.hip.api.dao.Constants.RADIOLOGY_TYPE; @Repository @@ -106,8 +104,8 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " inner join encounter_type as et on et.encounter_type_id = e.encounter_type\n" + " where\n" + " (\n" + - " et.name = '" + RADIOLOGY_TYPE + "'\n" + - " or et.name = '" + PATIENT_DOCUMENT_TYPE + "'\n" + + " et.name = '" + Config.RADIOLOGY_TYPE.getValue() + "'\n" + + " or et.name = '" + Config.PATIENT_DOCUMENT.getValue() + "'\n" + " )\n" + " and visit_id in (\n" + " SELECT\n" + @@ -120,7 +118,7 @@ public EncounterDaoImpl(SessionFactory sessionFactory) { " ) as t\n" + " INNER JOIN concept_name AS cn ON cn.concept_id = t.obs_concept_id\n" + " WHERE\n" + - " name = '" + DOCUMENT_TYPE + "'\n" + + " name = '" + Config.DOCUMENT_TYPE.getValue() + "'\n" + " and obs_void_reason is null\n" + " and person_uuid = :patientUUID\n" + " and pro_name = :programName\n" + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java index f5134488..e26eb92d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ExistingPatientDaoImpl.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.hibernate.Criteria; import org.hibernate.Query; @@ -15,7 +16,6 @@ public class ExistingPatientDaoImpl implements ExistingPatientDao { private final SessionFactory sessionFactory; - public static final String ABHA_ADDRESS = "ABHA Address"; @Autowired public ExistingPatientDaoImpl(SessionFactory sessionFactory) { @@ -67,7 +67,7 @@ public String getPatientHealthIdWithPatientId(Integer patientId) { "\tand piy.name = :healthId ;"; Query query = this.sessionFactory.openSession().createSQLQuery(getPatientHealthId); query.setParameter("patientId", patientId); - query.setParameter("healthId", ABHA_ADDRESS); + query.setParameter("healthId", Config.ABHA_ADDRESS.getValue()); List healthIds = query.list(); return healthIds.size() > 0 ? healthIds.get(0) : null; } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 546d4d3b..bab54aea 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -1,4 +1,5 @@ package org.bahmni.module.hip.api.dao.impl; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.openmrs.Concept; @@ -30,10 +31,6 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.bahmni.module.hip.api.dao.Constants.CODED_DIAGNOSIS; -import static org.bahmni.module.hip.api.dao.Constants.CONSULTATION; -import static org.bahmni.module.hip.api.dao.Constants.NON_CODED_DIAGNOSIS; -import static org.bahmni.module.hip.api.dao.Constants.PROCEDURE_NOTES; @Repository public class OPConsultDaoImpl implements OPConsultDao { @@ -61,7 +58,7 @@ public OPConsultDaoImpl(ObsService obsService, ConditionService conditionService public Map> getMedicalHistoryConditions(Visit visit) { final String conditionStatusHistoryOf = "HISTORY_OF"; final String conditionStatusActive = "ACTIVE"; - List encounters = encounterDao.GetEncountersForVisit(visit, CONSULTATION); + List encounters = encounterDao.GetEncountersForVisit(visit, Config.CONSULTATION.getValue()); if(encounters.size() == 0) return new HashMap<>(); List conditions = conditionService.getActiveConditions(visit.getPatient()) @@ -105,14 +102,14 @@ public Map> getMedicalHistoryConditions(Visit visit) @Override public List getMedicalHistoryDiagnosis(Visit visit) { - List medicalHistoryDiagnosisObsMap = encounterDao.GetAllObsForVisit(visit, CONSULTATION, CODED_DIAGNOSIS); - medicalHistoryDiagnosisObsMap.addAll(encounterDao.GetAllObsForVisit(visit, CONSULTATION, NON_CODED_DIAGNOSIS)); + List medicalHistoryDiagnosisObsMap = encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.CODED_DIAGNOSIS.getValue()); + medicalHistoryDiagnosisObsMap.addAll(encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.NON_CODED_DIAGNOSIS.getValue())); return medicalHistoryDiagnosisObsMap; } @Override public List getProcedures(Visit visit) { - List proceduresObsMap = encounterDao.GetAllObsForVisit(visit, CONSULTATION, PROCEDURE_NOTES).stream() + List proceduresObsMap = encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.PROCEDURE_NOTES.getValue()).stream() .filter(o -> !o.getVoided()) .collect(Collectors.toList()); @@ -129,9 +126,9 @@ public List getProceduresForProgram(String programName, Date fromDate, Date Set encounterSet = episode.getEncounters(); for (Encounter encounter : encounterSet) { for (Obs o : encounter.getAllObs()) { - if (Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) + if (Objects.equals(o.getEncounter().getEncounterType().getName(), Config.CONSULTATION.getValue()) && !o.getVoided() - && Objects.equals(o.getConcept().getName().getName(), PROCEDURE_NOTES) + && Objects.equals(o.getConcept().getName().getName(), Config.PROCEDURE_NOTES.getValue()) ) { proceduresObsSet.add(o); } @@ -202,8 +199,8 @@ public List getMedicalHistoryDiagnosisForProgram(String programName, Date f Set encounterSet = episode.getEncounters(); for (Encounter encounter: encounterSet) { for(Obs o : encounter.getAllObs()){ - if(Objects.equals(o.getEncounter().getEncounterType().getName(), CONSULTATION) - && Objects.equals(o.getConcept().getName().getName(), CODED_DIAGNOSIS) + if(Objects.equals(o.getEncounter().getEncounterType().getName(), Config.CONSULTATION.getValue()) + && Objects.equals(o.getConcept().getName().getName(), Config.CODED_DIAGNOSIS.getValue()) && o.getValueCoded() != null && o.getConcept().getName().getLocalePreferred()) { diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java index 75fbd7f4..26c05339 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirDiagnosticReport.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.model; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.Bundle; @@ -19,7 +20,6 @@ import java.util.Set; import java.util.stream.Collectors; -import static org.bahmni.module.hip.web.service.Constants.DOCUMENT_TYPE; public class FhirDiagnosticReport { private final List diagnosticReports; @@ -73,7 +73,7 @@ public static FhirDiagnosticReport fromOpenMrsDiagnosticReport(OpenMrsDiagnostic Integer encounterId = openMrsDiagnosticReport.getEncounter().getId(); List practitioners = getPractitionersFrom(fhirResourceMapper, openMrsDiagnosticReport.getEncounterProviders()); List observationNotDocumentType = openMrsDiagnosticReport.getEncounter().getAllObs().stream() - .filter(obs -> (!obs.getConcept().getName().getName().equals(DOCUMENT_TYPE))).collect(Collectors.toList()); + .filter(obs -> (!obs.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue()))).collect(Collectors.toList()); List observations = observationNotDocumentType.stream() .map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); List diagnosticReports = observationNotDocumentType.stream() diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java index 2630b7bd..6d4dee14 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirLabResult.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.model; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.Attachment; @@ -28,7 +29,6 @@ import java.util.UUID; import java.util.stream.Collectors; -import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENTS_PATH; public class FhirLabResult { @@ -160,7 +160,7 @@ private static List getAttachments(Obs obs,String testNmae) throws I Attachment attachment = new Attachment(); attachment.setContentType(FHIRUtils.getTypeOfTheObsDocument(obs.getValueText())); - byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + obs.getValueText()).toPath()); + byte[] fileContent = Files.readAllBytes(new File(Config.PATIENT_DOCUMENTS_PATH.getValue() + obs.getValueText()).toPath()); attachment.setData(fileContent); attachment.setTitle("LAB REPORT : " + testNmae); attachments.add(attachment); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 28aaf170..63bb3a3a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -8,21 +8,8 @@ public class Constants { static final String EKA_LOINC_SYSTEM = "https://projecteka.in/loinc"; static final String FHIR_CONDITION_CATEGORY_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-category"; static final String FHIR_CONDITION_CLINICAL_STATUS_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-clinical"; - - - - - static final String PROP_HFR_ID = "bahmniHip.healthFacilityRegistryId"; - static final String PROP_HFR_NAME = "bahmniHip.healthFacilityName"; - static final String PROP_HFR_SYSTEM = "bahmniHip.healthFacilitySystem"; - static final String PROP_PRACTITIONER_SYSTEM = "bahmniHip.practitionerSystem"; - static final String PROP_HFR_URL = "bahmniHip.healthFacilityUrl"; - static final String FHIR_ENC_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode"; - - public static final String PATIENT_DOCUMENTS_PATH = "/home/bahmni/document_images/"; - static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; static final String IMAGE = "image/"; static final String JPEG = "jpeg"; @@ -31,12 +18,4 @@ public class Constants { static final String GIF = "gif"; static final String PDF = "pdf"; static final String MIMETYPE_PDF = "application/pdf"; - - public static final String RADIOLOGY_TYPE = "6"; - public static final String PATIENT_DOCUMENT_TYPE = "9"; - public static final String DOCUMENT_TYPE = "Document"; - public static final String RADIOLOGY_REPORT = "Radiology Report"; - public static final String PATIENT_DOCUMENT = "Patient Document"; - - public static final String ABHA_ADDRESS = "ABHA Address"; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index 447a07a5..db8ba9c1 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -1,6 +1,7 @@ package org.bahmni.module.hip.web.service; import org.bahmni.module.bahmnicore.dao.OrderDao; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.DiagnosticReportDao; import org.bahmni.module.hip.api.dao.EncounterDao; import org.bahmni.module.hip.api.dao.HipVisitDao; @@ -36,10 +37,6 @@ public class DiagnosticReportService { private HipVisitDao hipVisitDao; private OrderDao orderDao; private final DiagnosticReportDao diagnosticReportDao; - private final String ORDER_TYPE = "Order"; - private static final String RADIOLOGY_TYPE = "RADIOLOGY"; - private static final String PATIENT_DOCUMENT_TYPE = "Patient Document"; - private static final String DOCUMENT_TYPE = "Document"; private LabOrderResultsService labOrderResultsService; @@ -77,8 +74,8 @@ public List getDiagnosticReportsForVisit(String patientU } public HashMap> getAllObservationsForVisits(Visit visit) { - List patientObs = encounterDao.GetAllObsForVisit(visit, RADIOLOGY_TYPE, DOCUMENT_TYPE); - patientObs.addAll(encounterDao.GetAllObsForVisit(visit, PATIENT_DOCUMENT_TYPE, DOCUMENT_TYPE)); + List patientObs = encounterDao.GetAllObsForVisit(visit, Config.RADIOLOGY_TYPE.getValue(), Config.DOCUMENT_TYPE.getValue()); + patientObs.addAll(encounterDao.GetAllObsForVisit(visit, Config.PATIENT_DOCUMENT.getValue(), Config.DOCUMENT_TYPE.getValue())); HashMap> encounterListMap = new HashMap<>(); for (Obs obs: patientObs) { Encounter encounter = obs.getEncounter(); @@ -177,7 +174,7 @@ public List getLabResultsForPrograms(String patientUuid, List visits, visitsWithOrdersForProgram ; - visits = orderDao.getVisitsWithAllOrders(patient, ORDER_TYPE, null, null ); + visits = orderDao.getVisitsWithAllOrders(patient, Config.ORDER_TYPE.getValue(), null, null ); visitsWithOrdersForProgram = visits.stream().filter( visit -> visitsForProgram.contains(visit.getVisitId()) ).collect(Collectors.toList());; return getLabResults(patient, visitsWithOrdersForProgram); } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index ff8edf8e..f5d3fe5d 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -2,6 +2,7 @@ import org.bahmni.module.bahmnicore.contract.patient.response.PatientResponse; import org.bahmni.module.bahmnicore.dao.PatientDao; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.bahmni.module.hip.web.client.model.Status; import org.bahmni.module.hip.web.model.ExistingPatient; @@ -19,7 +20,6 @@ import java.util.List; import java.util.Set; -import static org.bahmni.module.hip.web.service.Constants.ABHA_ADDRESS; @Service public class ExistingPatientService { @@ -28,8 +28,6 @@ public class ExistingPatientService { private final PatientDao patientDao; private final PatientService patientService; private final LocationService locationService; - private static final String LOCATION = "Bahmni Clinic"; - private static final String PHONE_NUMBER = "phoneNumber"; static final int PHONE_NUMBER_LENGTH = 10; @Autowired @@ -51,7 +49,7 @@ public Set getMatchingPatients(String phoneNumber, String patientName, public String getHealthId(Patient patient) { String healthId = ""; try { - healthId = patient.getPatientIdentifier(ABHA_ADDRESS).getIdentifier(); + healthId = patient.getPatientIdentifier(Config.ABHA_ADDRESS.getValue()).getIdentifier(); } catch (NullPointerException ignored) { } @@ -60,7 +58,7 @@ public String getHealthId(Patient patient) { public void perform(String healthId, String action) { Patient patient = patientService.getPatientByUuid(getPatientWithHealthId(healthId)); - PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(ABHA_ADDRESS); + PatientIdentifier patientIdentifierPhr = patient.getPatientIdentifier(Config.ABHA_ADDRESS.getValue()); if (action.equals(Status.DELETED.toString())) { removeHealthId(patient,patientIdentifierPhr); } @@ -85,7 +83,7 @@ private void unVoidHealthId(Patient patient, String phrAddress) { Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier : patientIdentifiers) { - if (patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)) { + if (patientIdentifier.getIdentifierType().getName().equals(Config.ABHA_ADDRESS.getValue())) { if(patientIdentifier.getVoided()){ patientIdentifier.setVoided(false); patientService.savePatientIdentifier(patientIdentifier); @@ -134,7 +132,7 @@ private List getPatients(String patientName, int patientYearOfB private List filterPatientsByName(String patientName) { return patientDao.getPatients("", patientName, null, null, "", 100, 0, null, "", null, null, null, - locationService.getLocation(LOCATION).getUuid(), false, false); + locationService.getLocation(Config.LOCATION.getValue()).getUuid(), false, false); } @@ -188,7 +186,7 @@ public List getMatchingPatientDetails(Set matchingPati private String getPhoneNumber(Patient patient) { String phoneNumber = " "; try { - phoneNumber = patient.getAttribute(PHONE_NUMBER).getValue(); + phoneNumber = patient.getAttribute(Config.PHONE_NUMBER.getValue()).getValue(); } catch (NullPointerException ignored) { } @@ -213,7 +211,7 @@ public boolean isHealthIdVoided(String uuid){ Set patientIdentifiers = patient.getIdentifiers(); try { for (PatientIdentifier patientIdentifier:patientIdentifiers) { - if(patientIdentifier.getIdentifierType().getName().equals(ABHA_ADDRESS)){ + if(patientIdentifier.getIdentifierType().getName().equals(Config.ABHA_ADDRESS.getValue())){ return patientIdentifier.getVoided(); } } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 3bcf5701..3f6ab67d 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.model.OpenMrsCondition; import org.hl7.fhir.r4.model.DiagnosticReport; import org.hl7.fhir.r4.model.Encounter; @@ -43,13 +44,6 @@ import java.util.Objects; import java.util.Set; -import static org.bahmni.module.hip.web.service.Constants.DOCUMENT_TYPE; -import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENT; -import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENTS_PATH; -import static org.bahmni.module.hip.web.service.Constants.PATIENT_DOCUMENT_TYPE; -import static org.bahmni.module.hip.web.service.Constants.RADIOLOGY_REPORT; -import static org.bahmni.module.hip.web.service.Constants.RADIOLOGY_TYPE; - @Service public class FHIRResourceMapper { @@ -189,20 +183,20 @@ private List getAttachments(Obs obs) throws IOException { StringBuilder valueText = new StringBuilder(); StringBuilder contentType = new StringBuilder(); for(Obs obs1 : obsList){ - if(obs1.getConcept().getName().getName().equals(DOCUMENT_TYPE)){ + if(obs1.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue())){ valueText.append(obs1.getValueText()); contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs1.getValueText())); } } attachment.setContentType(contentType.toString()); - byte[] fileContent = Files.readAllBytes(new File(PATIENT_DOCUMENTS_PATH + valueText).toPath()); + byte[] fileContent = Files.readAllBytes(new File(Config.PATIENT_DOCUMENTS_PATH.getValue() + valueText).toPath()); attachment.setData(fileContent); StringBuilder title = new StringBuilder(); - String encounterId = obs.getEncounter().getEncounterType().getEncounterTypeId().toString(); - if(encounterId.equals(PATIENT_DOCUMENT_TYPE)) - title.append(PATIENT_DOCUMENT); - else if(encounterId.equals(RADIOLOGY_TYPE)) - title.append(RADIOLOGY_REPORT); + String encounterId = obs.getEncounter().getEncounterType().getName(); + if(encounterId.equals(Config.PATIENT_DOCUMENT.getValue())) + title.append(Config.PATIENT_DOCUMENT.getValue()); + else if(encounterId.equals(Config.RADIOLOGY_TYPE.getValue())) + title.append(Config.RADIOLOGY_REPORT.getValue()); title.append(": ").append(obs.getConcept().getName().getName()); attachment.setTitle(title.toString()); attachments.add(attachment); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java index fe39a5a3..bb3e1655 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/OrganizationContextService.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.model.OrganizationContext; import org.hl7.fhir.r4.model.Organization; import org.openmrs.api.AdministrationService; @@ -19,14 +20,14 @@ OrganizationContext buildContext() { private String webURL() { AdministrationService administrationService = Context.getAdministrationService(); - return administrationService.getGlobalProperty(Constants.PROP_HFR_URL); + return administrationService.getGlobalProperty(Config.PROP_HFR_URL.getValue()); } private Organization createOrganizationInstance() { AdministrationService administrationService = Context.getAdministrationService(); - String hfrId = administrationService.getGlobalProperty(Constants.PROP_HFR_ID); - String hfrName = administrationService.getGlobalProperty(Constants.PROP_HFR_NAME); - String hfrSystem = administrationService.getGlobalProperty(Constants.PROP_HFR_SYSTEM); + String hfrId = administrationService.getGlobalProperty(Config.PROP_HFR_ID.getValue()); + String hfrName = administrationService.getGlobalProperty(Config.PROP_HFR_NAME.getValue()); + String hfrSystem = administrationService.getGlobalProperty(Config.PROP_HFR_SYSTEM.getValue()); return FHIRUtils.createOrgInstance(hfrId, hfrName, hfrSystem); } } From c25561db32fec89f65cced42b989beb1f8bcf8e0 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 19 Sep 2022 12:45:30 +0530 Subject: [PATCH 229/264] BAH-2152 | Refactor. removed unused constants --- api/src/main/java/org/bahmni/module/hip/Config.java | 1 - .../java/org/bahmni/module/hip/web/service/Constants.java | 6 ------ .../bahmni/module/hip/web/service/FHIRResourceMapper.java | 2 +- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index c9c05765..c8ffa590 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -35,7 +35,6 @@ public enum Config { private final String value; - Config(String val) { value = val; } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 63bb3a3a..917731b8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -1,14 +1,8 @@ package org.bahmni.module.hip.web.service; public class Constants { - static final String EKA_SYSTEM = "https://projecteka.in/%s"; - static final String HOSPITAL_SYSTEM = "https://%s/%s"; static final String FHIR_SCT_SYSTEM = "http://snomed.info/sct"; - static final String EKA_ACT_SYSTEM = "https://projecteka.in/act"; - static final String EKA_LOINC_SYSTEM = "https://projecteka.in/loinc"; - static final String FHIR_CONDITION_CATEGORY_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-category"; static final String FHIR_CONDITION_CLINICAL_STATUS_SYSTEM = "http://terminology.hl7.org/CodeSystem/condition-clinical"; - static final String FHIR_ENC_CLASS_SYSTEM = "http://terminology.hl7.org/CodeSystem/v3-ActCode"; static final String MIMETYPE_IMAGE_JPEG = "image/jpeg"; static final String IMAGE = "image/"; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 3f6ab67d..cf415460 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -211,7 +211,7 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie condition.setSubject(new Reference("Patient/" + patient.getId())); condition.setId(openMrsCondition.getUuid()); condition.setRecordedDate(openMrsCondition.getRecordedDate()); - condition.setClinicalStatus(new CodeableConcept(new Coding().setCode("active").setSystem("http://terminology.hl7.org/CodeSystem/condition-clinical"))); + condition.setClinicalStatus(new CodeableConcept(new Coding().setCode("active").setSystem(Constants.FHIR_CONDITION_CLINICAL_STATUS_SYSTEM))); return condition; } From 389df5482d2fb4950568c20b7e5cf3808bf049e0 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 19 Sep 2022 12:46:17 +0530 Subject: [PATCH 230/264] BAH-2152 | Refactor. readme with instruction to configure a value --- README.md | 29 +++++++++++++++++++ .../java/org/bahmni/module/hip/Config.java | 8 +++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b3d7ac7c..c46b3018 100644 --- a/README.md +++ b/README.md @@ -23,3 +23,32 @@ If uploads are not allowed from the web (changable via a runtime property), you into the ~/.OpenMRS/modules folder. (Where ~/.OpenMRS is assumed to be the Application Data Directory that the running openmrs is currently using.) After putting the file in there simply restart OpenMRS/tomcat and the module will be loaded and started. + +Configure values +------------ +## Vagrant setup + +You can configure values like, say location, concept and attribute names. you can check **api/src/main/java/org/bahmni/module/hip/Config.java** to know what are the values you can configure and default values. + +### One time setup + +1. create a file. For example, created `env_file` in `/etc/openmrs/` directory. +2. To create conf file for openmrs service,`systemctl edit openmrs`. It will open blank file. paste the following lines in it +``` +[Service] +EnvironmentFile=/etc/openmrs/env_file +``` +Note: You need to specify your created file path from 1st step in `EnvironmentFile` variable + +### To configure values + +You need to add values to the `env_file`. For example, if you need to specify custom values for Location and Phone Number attribute. +``` +LOCATION=your_location +PHONE_NUMBER=your_phoneNumber_attribute_name +``` +Note: Attribute Name should be exactly same as enum keys from **api/src/main/java/org/bahmni/module/hip/Config.java** + +## Docker setup + +You can add values to the openmrs Environment variables, specifying same attribute name. \ No newline at end of file diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index c8ffa590..b06c79ed 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -4,10 +4,14 @@ public enum Config { PATIENT_DOCUMENTS_PATH("/home/bahmni/document_images/"), - ABHA_ADDRESS("ABHA Address"), - LOCATION("Bahmni Clinics"), + LOCATION("Bahmni Clinic"), + + //attribute name PHONE_NUMBER("phoneNumber"), + //identifier type + ABHA_ADDRESS("ABHA Address"), + //encounterType CONSULTATION("Consultation"), PATIENT_DOCUMENT("Patient Document"), From d715750d6f38a1a6e21699fced7c73a05c0fa0a4 Mon Sep 17 00:00:00 2001 From: SanoferSameera <79590907+SanoferSameera@users.noreply.github.com> Date: Mon, 19 Sep 2022 16:46:06 +0530 Subject: [PATCH 231/264] Update liquibase.xml --- api/src/main/resources/liquibase.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index a8043163..abd8ddea 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -49,13 +49,13 @@ - + select count(*) from patient_identifier_type where name='ABHA Address' Updating global property for ABHA address - update global_property set property_value=(SELECT CONCAT(COALESCE(property_value,''),',',uuid) from patient_identifier_type where name = 'ABHA Address') where property = 'bahmni.extraPatientIdentifierTypes'; + update global_property set property_value=(SELECT CONCAT(IF(property_value='','',CONCAT(property_value,',')),uuid) from patient_identifier_type where name = 'ABHA Address') where property = 'bahmni.extraPatientIdentifierTypes'; From 2a01b7abdd1f19bb37a3a17ffedcc62fe4e3a8a1 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 21 Sep 2022 13:40:49 +0530 Subject: [PATCH 232/264] Add. precheck condition to check globalproperty values --- api/src/main/resources/liquibase.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/api/src/main/resources/liquibase.xml b/api/src/main/resources/liquibase.xml index abd8ddea..5e2c4375 100644 --- a/api/src/main/resources/liquibase.xml +++ b/api/src/main/resources/liquibase.xml @@ -49,13 +49,14 @@ - + select count(*) from patient_identifier_type where name='ABHA Address' + select count(*) from global_property where property = 'bahmni.extraPatientIdentifierTypes' and property_value LIKE CONCAT('%', (Select uuid from patient_identifier_type where name = 'ABHA Address')) Updating global property for ABHA address - update global_property set property_value=(SELECT CONCAT(IF(property_value='','',CONCAT(property_value,',')),uuid) from patient_identifier_type where name = 'ABHA Address') where property = 'bahmni.extraPatientIdentifierTypes'; + update global_property set property_value=(SELECT CONCAT(IF(ISNULL(property_value),'',CONCAT(property_value,',')),uuid) from patient_identifier_type where name = 'ABHA Address') where property = 'bahmni.extraPatientIdentifierTypes'; From 2c76f8070ae252cc9d66f44ab5b8fc5af688d623 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Fri, 23 Sep 2022 18:23:48 +0530 Subject: [PATCH 233/264] BAH-2152 | Add. configuration for form to ignore physical examination --- api/src/main/java/org/bahmni/module/hip/Config.java | 4 ++++ .../bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java | 6 ++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index b06c79ed..3fc4de03 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -30,6 +30,10 @@ public enum Config { RADIOLOGY_ORDER( "Radiology Order"), LAB_ORDER( "Lab Order"), + //Physical_Examination_Ignoring_Form_List + Forms_To_Ignore_In_Physical_Examination("Discharge Summary, Death Note, Delivery Note, Opioid Substitution Therapy - Intake, Opportunistic Infection, " + + "Safe Abortion, ECG Notes, Operative Notes, USG Notes, Procedure Notes,Triage Reference, History and Examination, Visit Diagnoses"), + PROP_HFR_ID("bahmniHip.healthFacilityRegistryId"), PROP_HFR_NAME( "bahmniHip.healthFacilityName"), diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index a06c8de1..1705e86b 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -89,8 +89,7 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie @Override public List getPhysicalExamination(Visit visit) { - final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", - "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; + final String[] formNames = Config.Forms_To_Ignore_In_Physical_Examination.getValue().split("\\s*,\\s*"); List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(),null) .stream().filter(o -> o.getValueCoded() == null && o.getObsGroup() == null && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) ) @@ -127,8 +126,7 @@ public List getOrdersForProgram(String programName, Date fromDate, Date t @Override public List getPhysicalExaminationForProgram(String programName, Date fromDate, Date toDate, Patient patient) { - final String[] formNames = new String[]{"Discharge Summary", "Death Note", "Delivery Note", "Opioid Substitution Therapy - Intake", "Opportunistic Infection", - "Safe Abortion", "ECG Notes", "Operative Notes", "USG Notes", "Procedure Notes", "Triage Reference", "History and Examination", "Visit Diagnoses"}; + final String[] formNames = Config.Forms_To_Ignore_In_Physical_Examination.getValue().split("\\s*,\\s*"); List physicalExaminationObsMap = new ArrayList<>(); List obs = getAllObs(programName, fromDate, toDate, patient); for (Obs o : obs) { From ac2ab135dc9299e8343f8c81420fdad32b0fca19 Mon Sep 17 00:00:00 2001 From: swatigogia2020 Date: Tue, 4 Oct 2022 09:47:48 +0530 Subject: [PATCH 234/264] BAH-2258: Modifying obs query to fetch units as well --- .../module/hip/api/dao/EncounterDao.java | 2 ++ .../org/bahmni/module/hip/api/dao/ObsDao.java | 10 ++++++ .../hip/api/dao/impl/EncounterDaoImpl.java | 26 +++++++++++++++- .../module/hip/api/dao/impl/ObsDaoImpl.java | 24 ++++++++++++++ .../bahmni/module/hip/model/PatientObs.java | 31 +++++++++++++++++++ 5 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java create mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java create mode 100644 api/src/main/java/org/bahmni/module/hip/model/PatientObs.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java index b2206cb1..69496ded 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.api.dao; +import org.bahmni.module.hip.model.PatientObs; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Order; @@ -14,6 +15,7 @@ public interface EncounterDao { List GetOrdersForVisit(Visit visit); List GetEncountersForVisit(Visit visit, String encounterType); List GetAllObsForVisit(Visit visit, String encounterType, String conceptName); + List GetAllObservationsForVisit(Visit visit, String encounterType, String conceptName); List GetEncounterIdsForProgramForPrescriptions(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForDiagnosticReport(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java new file mode 100644 index 00000000..49a9689e --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java @@ -0,0 +1,10 @@ +package org.bahmni.module.hip.api.dao; + +import org.openmrs.Obs; + +import java.util.List; + +public interface ObsDao { + List getObsUnits(Obs obs); + +} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index 79950796..cc3262c7 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -2,6 +2,8 @@ import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.EncounterDao; +import org.bahmni.module.hip.api.dao.ObsDao; +import org.bahmni.module.hip.model.PatientObs; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.openmrs.Encounter; @@ -23,10 +25,12 @@ public class EncounterDaoImpl implements EncounterDao { private SessionFactory sessionFactory; + private final ObsDao obsDao; @Autowired - public EncounterDaoImpl(SessionFactory sessionFactory) { + public EncounterDaoImpl(SessionFactory sessionFactory, ObsDao obsDao) { this.sessionFactory = sessionFactory; + this.obsDao = obsDao; } private String sqlGetEpisodeEncounterIds = "select\n" + @@ -161,6 +165,26 @@ public List GetAllObsForVisit(Visit visit, String encounterType, String con return observations; } + @Override + public List GetAllObservationsForVisit(Visit visit, String encounterType, String conceptName) { + List observations = new ArrayList<>(); + List encounters = GetEncountersForVisit(visit,encounterType); + for (Encounter encounter : encounters) { + if(conceptName == null) + observations.addAll(encounter.getAllObs()); + observations.addAll(encounter.getAllObs().stream() + .filter(o -> Objects.equals(o.getConcept().getName().getName(), conceptName)) + .collect(Collectors.toList())); + } + + List patientObs = new ArrayList<>(); + for(Obs obs: observations){ + PatientObs patientObs1 = new PatientObs(obsDao.getObsUnits(obs).toString(), obs); + patientObs.add(patientObs1); + } + return patientObs; + } + @Override public List GetOrdersForVisit(Visit visit) { List episodeEncounters = GetEpisodeEncounterIds(); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java new file mode 100644 index 00000000..75fc8d87 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java @@ -0,0 +1,24 @@ +package org.bahmni.module.hip.api.dao.impl; + +import org.bahmni.module.hip.api.dao.ObsDao; +import org.hibernate.Query; +import org.hibernate.SessionFactory; +import org.openmrs.Obs; +import org.springframework.stereotype.Repository; + +import java.util.List; +@Repository +public class ObsDaoImpl implements ObsDao { + + private SessionFactory sessionFactory; + + private String sqlGetObsUnits= "select units from concept_numeric as cn join obs on cn.concept_id=obs.concept_id where obs_id = :obsId ; "; + + @Override + public List getObsUnits(Obs obs){ + Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetObsUnits); + query.setParameter("obsId", obs.getObsId()); + + return query.list(); + } +} diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java b/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java new file mode 100644 index 00000000..937bf080 --- /dev/null +++ b/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java @@ -0,0 +1,31 @@ +package org.bahmni.module.hip.model; + +import org.openmrs.Obs; + +public class PatientObs { + protected String units; + protected Obs obs; + + public PatientObs(String units, Obs obs){ + this.units = units; + this.obs = obs; + } + + public void setUnits(String units){ + this.units = units; + } + + public String getUnits(){ + return this.units; + } + + public void setObs(Obs obs){ + this.obs = obs; + } + + public Obs getObs() { + return obs; + } + + +} From 8e8bc0c46edf41a67e5e9da16bdf9876e56335df Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 12 Oct 2022 16:45:43 +0530 Subject: [PATCH 235/264] Revert "BAH-2258: Modifying obs query to fetch units as well" This reverts commit fa847746379fa0d6f91edb5aa2ebdc743a4e2cfd. --- .../module/hip/api/dao/EncounterDao.java | 2 -- .../org/bahmni/module/hip/api/dao/ObsDao.java | 10 ------ .../hip/api/dao/impl/EncounterDaoImpl.java | 26 +--------------- .../module/hip/api/dao/impl/ObsDaoImpl.java | 24 -------------- .../bahmni/module/hip/model/PatientObs.java | 31 ------------------- 5 files changed, 1 insertion(+), 92 deletions(-) delete mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java delete mode 100644 api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java delete mode 100644 api/src/main/java/org/bahmni/module/hip/model/PatientObs.java diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java index 69496ded..b2206cb1 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/EncounterDao.java @@ -1,6 +1,5 @@ package org.bahmni.module.hip.api.dao; -import org.bahmni.module.hip.model.PatientObs; import org.openmrs.Encounter; import org.openmrs.Obs; import org.openmrs.Order; @@ -15,7 +14,6 @@ public interface EncounterDao { List GetOrdersForVisit(Visit visit); List GetEncountersForVisit(Visit visit, String encounterType); List GetAllObsForVisit(Visit visit, String encounterType, String conceptName); - List GetAllObservationsForVisit(Visit visit, String encounterType, String conceptName); List GetEncounterIdsForProgramForPrescriptions(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate) ; List GetEncounterIdsForProgramForDiagnosticReport(String patientUUID, String program, String programEnrollmentID, Date fromDate, Date toDate); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java deleted file mode 100644 index 49a9689e..00000000 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/ObsDao.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.bahmni.module.hip.api.dao; - -import org.openmrs.Obs; - -import java.util.List; - -public interface ObsDao { - List getObsUnits(Obs obs); - -} diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java index cc3262c7..79950796 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/EncounterDaoImpl.java @@ -2,8 +2,6 @@ import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.EncounterDao; -import org.bahmni.module.hip.api.dao.ObsDao; -import org.bahmni.module.hip.model.PatientObs; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.openmrs.Encounter; @@ -25,12 +23,10 @@ public class EncounterDaoImpl implements EncounterDao { private SessionFactory sessionFactory; - private final ObsDao obsDao; @Autowired - public EncounterDaoImpl(SessionFactory sessionFactory, ObsDao obsDao) { + public EncounterDaoImpl(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; - this.obsDao = obsDao; } private String sqlGetEpisodeEncounterIds = "select\n" + @@ -165,26 +161,6 @@ public List GetAllObsForVisit(Visit visit, String encounterType, String con return observations; } - @Override - public List GetAllObservationsForVisit(Visit visit, String encounterType, String conceptName) { - List observations = new ArrayList<>(); - List encounters = GetEncountersForVisit(visit,encounterType); - for (Encounter encounter : encounters) { - if(conceptName == null) - observations.addAll(encounter.getAllObs()); - observations.addAll(encounter.getAllObs().stream() - .filter(o -> Objects.equals(o.getConcept().getName().getName(), conceptName)) - .collect(Collectors.toList())); - } - - List patientObs = new ArrayList<>(); - for(Obs obs: observations){ - PatientObs patientObs1 = new PatientObs(obsDao.getObsUnits(obs).toString(), obs); - patientObs.add(patientObs1); - } - return patientObs; - } - @Override public List GetOrdersForVisit(Visit visit) { List episodeEncounters = GetEpisodeEncounterIds(); diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java deleted file mode 100644 index 75fc8d87..00000000 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ObsDaoImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.bahmni.module.hip.api.dao.impl; - -import org.bahmni.module.hip.api.dao.ObsDao; -import org.hibernate.Query; -import org.hibernate.SessionFactory; -import org.openmrs.Obs; -import org.springframework.stereotype.Repository; - -import java.util.List; -@Repository -public class ObsDaoImpl implements ObsDao { - - private SessionFactory sessionFactory; - - private String sqlGetObsUnits= "select units from concept_numeric as cn join obs on cn.concept_id=obs.concept_id where obs_id = :obsId ; "; - - @Override - public List getObsUnits(Obs obs){ - Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sqlGetObsUnits); - query.setParameter("obsId", obs.getObsId()); - - return query.list(); - } -} diff --git a/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java b/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java deleted file mode 100644 index 937bf080..00000000 --- a/api/src/main/java/org/bahmni/module/hip/model/PatientObs.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.bahmni.module.hip.model; - -import org.openmrs.Obs; - -public class PatientObs { - protected String units; - protected Obs obs; - - public PatientObs(String units, Obs obs){ - this.units = units; - this.obs = obs; - } - - public void setUnits(String units){ - this.units = units; - } - - public String getUnits(){ - return this.units; - } - - public void setObs(Obs obs){ - this.obs = obs; - } - - public Obs getObs() { - return obs; - } - - -} From fd4a4b8d74b8f507f45587fa97a4cc42f37a36da Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 12 Oct 2022 16:48:57 +0530 Subject: [PATCH 236/264] BAH-2258 | fixed. initializing concept object and unproxied --- .../hip/web/service/FHIRResourceMapper.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index cf415460..d44298ab 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -2,6 +2,8 @@ import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.model.OpenMrsCondition; +import org.hibernate.Hibernate; +import org.hibernate.proxy.HibernateProxy; import org.hl7.fhir.r4.model.DiagnosticReport; import org.hl7.fhir.r4.model.Encounter; import org.hl7.fhir.r4.model.CarePlan; @@ -25,6 +27,7 @@ import org.openmrs.EncounterProvider; import org.openmrs.Obs; import org.openmrs.Order; +import org.openmrs.Concept; import org.openmrs.module.fhir2.api.translators.MedicationRequestTranslator; import org.openmrs.module.fhir2.api.translators.MedicationTranslator; import org.openmrs.module.fhir2.api.translators.PatientTranslator; @@ -216,6 +219,8 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie } public Observation mapToObs(Obs obs) { + Concept concept = initializeEntityAndUnproxy(obs.getConcept()); + obs.setConcept(concept); return observationTranslator.toFhirResource(obs); } @@ -266,4 +271,15 @@ public Medication mapToMedication(DrugOrder order) { } return medicationTranslator.toFhirResource(order.getDrug()); } + + public static T initializeEntityAndUnproxy(T entity) { + if (entity == null) { + throw new NullPointerException("Entity passed for initialization is null"); + } + Hibernate.initialize(entity); + if (entity instanceof HibernateProxy) { + entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer().getImplementation(); + } + return entity; + } } From 9dcc2a5d1a78c4fad33a42d8c1830d3177e12eba Mon Sep 17 00:00:00 2001 From: SanoferSameera <79590907+SanoferSameera@users.noreply.github.com> Date: Fri, 14 Oct 2022 12:56:15 +0530 Subject: [PATCH 237/264] BAH-2257 | Add. notes to observation (#82) --- .../bahmni/module/hip/web/service/FHIRResourceMapper.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index d44298ab..8518956e 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -22,6 +22,8 @@ import org.hl7.fhir.r4.model.Dosage; import org.hl7.fhir.r4.model.Medication; import org.hl7.fhir.r4.model.Enumerations; +import org.hl7.fhir.r4.model.Annotation; +import org.hl7.fhir.r4.model.MarkdownType; import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; @@ -221,7 +223,9 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie public Observation mapToObs(Obs obs) { Concept concept = initializeEntityAndUnproxy(obs.getConcept()); obs.setConcept(concept); - return observationTranslator.toFhirResource(obs); + Observation observation = observationTranslator.toFhirResource(obs); + observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); + return observation; } public ServiceRequest mapToOrder(Order order){ From 0dc608c6b5afbb66e01203f3ad78293e020fd002 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 18 Oct 2022 17:37:55 +0530 Subject: [PATCH 238/264] BAH-2371 | Add. To fetch consutation image and video upload as a part of Patient Documents --- .../main/java/org/bahmni/module/hip/Config.java | 2 ++ .../bahmni/module/hip/api/dao/OPConsultDao.java | 1 + .../module/hip/api/dao/impl/OPConsultDaoImpl.java | 14 ++++++++++++++ .../hip/web/service/ConsultationService.java | 4 +--- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index 3fc4de03..a4aaacab 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -29,6 +29,8 @@ public enum Config { LAB_REPORT( "LAB_REPORT"), RADIOLOGY_ORDER( "Radiology Order"), LAB_ORDER( "Lab Order"), + IMAGE("Image"), + PATIENT_VIDEO("Patient Video"), //Physical_Examination_Ignoring_Form_List Forms_To_Ignore_In_Physical_Examination("Discharge Summary, Death Note, Delivery Note, Opioid Substitution Therapy - Intake, Opportunistic Infection, " + diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java index 19f2f9e9..042ec250 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/OPConsultDao.java @@ -17,4 +17,5 @@ public interface OPConsultDao { List getProceduresForProgram(String programName, Date fromDate, Date toDate, Patient patient); Map> getMedicalHistoryConditionsForProgram(String programName, Date fromDate, Date toDate, Patient patient); List getMedicalHistoryDiagnosisForProgram(String programName, Date fromDate, Date toDate, Patient patient); + Map> getPatientDocumentsForVisit(Visit visit); } diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index bab54aea..12781a48 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -212,6 +212,20 @@ public List getMedicalHistoryDiagnosisForProgram(String programName, Date f return obsSet; } + public Map> getPatientDocumentsForVisit(Visit visit){ + List patientObs = encounterDao.GetAllObsForVisit(visit, Config.PATIENT_DOCUMENT.getValue(), Config.DOCUMENT_TYPE.getValue()); + patientObs.addAll(encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.IMAGE.getValue())); + patientObs.addAll(encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.PATIENT_VIDEO.getValue())); + HashMap> encounterListMap = new HashMap<>(); + for (Obs obs: patientObs) { + Encounter encounter = obs.getEncounter(); + if(!encounterListMap.containsKey(encounter)) + encounterListMap.put(encounter, new ArrayList(){{ add(obs); }}); + else + encounterListMap.get(encounter).add(obs); + } + return encounterListMap; + } private org.openmrs.module.emrapi.conditionslist.Condition convertCoreConditionToEmrapiCondition(org.openmrs.Condition coreCondition) { org.openmrs.module.emrapi.conditionslist.Condition cListCondition = new org.openmrs.module.emrapi.conditionslist.Condition(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 55e82dec..15e607a9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -75,9 +75,7 @@ public Map> getEncounterMedicalHistoryConditio } public Map> getEncounterPatientDocumentsMap(Visit visit) { - final int patientDocumentEncounterType = 9; - Map> encounterDiagnosticReportsMap = diagnosticReportService.getAllObservationsForVisits(visit); - return getEncounterListMapForPatientDocument(patientDocumentEncounterType, encounterDiagnosticReportsMap); + return opConsultDao.getPatientDocumentsForVisit(visit); } public Map> getEncounterPatientDocumentsMapForProgram(String programName, Date fromDate, Date toDate, Patient patient,String programEnrollmentId) { From 59fb6c9209e6b218826822bb0c52d5ec0a570a91 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Tue, 18 Oct 2022 17:41:34 +0530 Subject: [PATCH 239/264] BAH-2371 | Refactor. To send consultation image and video upload as attachment --- .github/workflows/build_and_upload.yml | 1 + .../hip/api/dao/impl/ConsultationDaoImpl.java | 4 +++- .../bahmni/module/hip/web/service/Constants.java | 5 +++++ .../hip/web/service/FHIRResourceMapper.java | 15 +++++++++------ .../bahmni/module/hip/web/service/FHIRUtils.java | 8 ++++++++ 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index a64ef6aa..ba7a28cd 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,6 +7,7 @@ on: push: branches: - master + - BAH-2371 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index 1705e86b..cb86229d 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -91,7 +91,9 @@ public List getAllObs(String programName, Date fromDate, Date toDate, Patie public List getPhysicalExamination(Visit visit) { final String[] formNames = Config.Forms_To_Ignore_In_Physical_Examination.getValue().split("\\s*,\\s*"); List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(),null) - .stream().filter(o -> o.getValueCoded() == null && o.getObsGroup() == null + .stream().filter(o -> o.getValueCoded() == null + && o.getValueComplex() == null + && o.getObsGroup() == null && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) ) .collect(Collectors.toList()); return physicalExaminationObsMap; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java index 917731b8..9dc6818d 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/Constants.java @@ -12,4 +12,9 @@ public class Constants { static final String GIF = "gif"; static final String PDF = "pdf"; static final String MIMETYPE_PDF = "application/pdf"; + static final String MIMETYPE_VIDEO_MPEG = "video/mpeg"; + static final String MIMETYPE_VIDEO_MP4 = "video/mp4"; + static final String MP4 = "mp4"; + static final String MPEG = "mpeg"; + } diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index cf415460..b905f93b 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -179,14 +179,15 @@ public DocumentReference mapToDocumentDocumentReference(Obs obs) { private List getAttachments(Obs obs) throws IOException { List attachments = new ArrayList<>(); Attachment attachment = new Attachment(); - Set obsList = obs.getGroupMembers(); StringBuilder valueText = new StringBuilder(); StringBuilder contentType = new StringBuilder(); - for(Obs obs1 : obsList){ - if(obs1.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue())){ - valueText.append(obs1.getValueText()); - contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs1.getValueText())); - } + if(obs.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue())){ + valueText.append(obs.getValueText()); + contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs.getValueText())); + } + if(obs.getConcept().getName().getName().equals(Config.IMAGE.getValue()) || obs.getConcept().getName().getName().equals(Config.PATIENT_VIDEO.getValue())){ + valueText.append(obs.getValueComplex()); + contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs.getValueComplex())); } attachment.setContentType(contentType.toString()); byte[] fileContent = Files.readAllBytes(new File(Config.PATIENT_DOCUMENTS_PATH.getValue() + valueText).toPath()); @@ -197,6 +198,8 @@ private List getAttachments(Obs obs) throws IOException { title.append(Config.PATIENT_DOCUMENT.getValue()); else if(encounterId.equals(Config.RADIOLOGY_TYPE.getValue())) title.append(Config.RADIOLOGY_REPORT.getValue()); + else if(encounterId.equals(Config.CONSULTATION.getValue())) + title.append("Consultation"); title.append(": ").append(obs.getConcept().getName().getName()); attachment.setTitle(title.toString()); attachments.add(attachment); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java index 745b6447..37d66a13 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRUtils.java @@ -22,6 +22,10 @@ import static org.bahmni.module.hip.web.service.Constants.JPG; import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_IMAGE_JPEG; import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_PDF; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_VIDEO_MP4; +import static org.bahmni.module.hip.web.service.Constants.MIMETYPE_VIDEO_MPEG; +import static org.bahmni.module.hip.web.service.Constants.MP4; +import static org.bahmni.module.hip.web.service.Constants.MPEG; import static org.bahmni.module.hip.web.service.Constants.PDF; import static org.bahmni.module.hip.web.service.Constants.PNG; @@ -200,6 +204,10 @@ public static String getTypeOfTheObsDocument(String valueText) { return IMAGE + extension; } else if (extension.compareTo(PDF) == 0) { return MIMETYPE_PDF; + } else if (extension.compareTo(MP4) == 0) { + return MIMETYPE_VIDEO_MP4; + } else if (extension.compareTo(MPEG) == 0) { + return MIMETYPE_VIDEO_MPEG; } else { return ""; } From 3d0963ba4a7cc3adec7fd94d0d2c04967940c228 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Thu, 20 Oct 2022 19:09:34 +0530 Subject: [PATCH 240/264] BAH-2371 | Refactor. To ignore consultation image and video upload in physical examination --- .github/workflows/build_and_upload.yml | 1 - api/src/main/java/org/bahmni/module/hip/Config.java | 2 +- .../org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java | 1 - .../org/bahmni/module/hip/web/service/ConsultationService.java | 2 +- 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index ba7a28cd..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,7 +7,6 @@ on: push: branches: - master - - BAH-2371 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index a4aaacab..bf25e526 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -34,7 +34,7 @@ public enum Config { //Physical_Examination_Ignoring_Form_List Forms_To_Ignore_In_Physical_Examination("Discharge Summary, Death Note, Delivery Note, Opioid Substitution Therapy - Intake, Opportunistic Infection, " + - "Safe Abortion, ECG Notes, Operative Notes, USG Notes, Procedure Notes,Triage Reference, History and Examination, Visit Diagnoses"), + "Safe Abortion, ECG Notes, Operative Notes, USG Notes, Procedure Notes,Triage Reference, History and Examination, Visit Diagnoses, Patient Video"), PROP_HFR_ID("bahmniHip.healthFacilityRegistryId"), diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java index cb86229d..0d012065 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/ConsultationDaoImpl.java @@ -92,7 +92,6 @@ public List getPhysicalExamination(Visit visit) { final String[] formNames = Config.Forms_To_Ignore_In_Physical_Examination.getValue().split("\\s*,\\s*"); List physicalExaminationObsMap = encounterDao.GetAllObsForVisit(visit,Config.CONSULTATION.getValue(),null) .stream().filter(o -> o.getValueCoded() == null - && o.getValueComplex() == null && o.getObsGroup() == null && !Arrays.asList(formNames).contains(o.getConcept().getName().getName()) ) .collect(Collectors.toList()); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 15e607a9..be1fc647 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -30,7 +30,7 @@ public class ConsultationService { private final OPConsultDao opConsultDao; private final DiagnosticReportService diagnosticReportService; - public static Set conceptNames = new HashSet<>(Arrays.asList("Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", + public static Set conceptNames = new HashSet<>(Arrays.asList("Image","Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Nutrition, Bal Vita Provided by FCHV","Bal Vita Provided by FCHV","ART, Condoms given","HIVTC, Marital Status","Malaria, Contact number", "HIVTC, Transferred out", "HIVTC, Regimen when transferred out", "HIVTC, Date of transferred out", "HIVTC, Transferred out to", "HIVTC, Chief Complaint")); From 266efbf4de3b6a3ae0fc3b16f34c274e0c0ee0b0 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Wed, 26 Oct 2022 15:49:05 +0530 Subject: [PATCH 241/264] To fetch patient document attachment in diagnostic report --- .../bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java | 3 ++- .../module/hip/web/service/FHIRResourceMapper.java | 9 ++++++--- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java index 12781a48..505bb612 100644 --- a/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java +++ b/api/src/main/java/org/bahmni/module/hip/api/dao/impl/OPConsultDaoImpl.java @@ -213,7 +213,8 @@ public List getMedicalHistoryDiagnosisForProgram(String programName, Date f } public Map> getPatientDocumentsForVisit(Visit visit){ - List patientObs = encounterDao.GetAllObsForVisit(visit, Config.PATIENT_DOCUMENT.getValue(), Config.DOCUMENT_TYPE.getValue()); + List patientObs = encounterDao.GetAllObsForVisit(visit, Config.PATIENT_DOCUMENT.getValue(),null) + .stream().filter(o -> !o.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue()) ).collect(Collectors.toList()); patientObs.addAll(encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.IMAGE.getValue())); patientObs.addAll(encounterDao.GetAllObsForVisit(visit, Config.CONSULTATION.getValue(), Config.PATIENT_VIDEO.getValue())); HashMap> encounterListMap = new HashMap<>(); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index bcc45a2d..ec58ab0a 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -185,10 +185,13 @@ private List getAttachments(Obs obs) throws IOException { List attachments = new ArrayList<>(); Attachment attachment = new Attachment(); StringBuilder valueText = new StringBuilder(); + Set obsList = obs.getGroupMembers(); StringBuilder contentType = new StringBuilder(); - if(obs.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue())){ - valueText.append(obs.getValueText()); - contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs.getValueText())); + for(Obs obs1 : obsList) { + if (obs1.getConcept().getName().getName().equals(Config.DOCUMENT_TYPE.getValue())) { + valueText.append(obs1.getValueText()); + contentType.append(FHIRUtils.getTypeOfTheObsDocument(obs1.getValueText())); + } } if(obs.getConcept().getName().getName().equals(Config.IMAGE.getValue()) || obs.getConcept().getName().getName().equals(Config.PATIENT_VIDEO.getValue())){ valueText.append(obs.getValueComplex()); From f9103224d816abf74095bbf0821805ed11144d5b Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Thu, 27 Oct 2022 16:30:26 +0530 Subject: [PATCH 242/264] BAH-2433 | refactored to display chief complaint as single concept in hiu --- .github/workflows/build_and_upload.yml | 1 + .../bahmni/module/hip/web/model/FhirOPConsult.java | 11 +++++++++++ .../module/hip/web/service/ConsultationService.java | 7 ++++++- .../module/hip/web/service/FHIRResourceMapper.java | 11 +++++++++++ 4 files changed, 29 insertions(+), 1 deletion(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index a64ef6aa..dadbba71 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,6 +7,7 @@ on: push: branches: - master + - BAH-2433 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index 130d91ff..657a5a43 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -1,5 +1,7 @@ package org.bahmni.module.hip.web.model; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.Condition; @@ -17,6 +19,8 @@ import org.hl7.fhir.r4.model.ServiceRequest; import org.openmrs.EncounterProvider; +import org.openmrs.Obs; + import java.util.List; import java.util.Date; import java.util.Objects; @@ -40,6 +44,7 @@ public class FhirOPConsult { private final Procedure procedure; private final List patientDocuments; private final List serviceRequest; + private static Logger logger = LogManager.getLogger(FhirOPConsult.class); public FhirOPConsult(List chiefComplaints, List medicalHistory, Date visitTimeStamp, @@ -107,8 +112,14 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu for(int i=0;i fhirObservationList = openMrsOPConsult.getObservations().stream(). map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); + for(Observation obs:fhirObservationList) { + logger.warn("fhirObservationList ----- " + obs.getValue()); + } Procedure procedure = openMrsOPConsult.getProcedure() != null ? fhirResourceMapper.mapToProcedure(openMrsOPConsult.getProcedure()) : null; List patientDocuments = openMrsOPConsult.getPatientDocuments().stream(). diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index be1fc647..08203e28 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -1,5 +1,7 @@ package org.bahmni.module.hip.web.service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.api.dao.ConsultationDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.bahmni.module.hip.web.model.OpenMrsCondition; @@ -29,6 +31,8 @@ public class ConsultationService { private final ConsultationDao consultationDao; private final OPConsultDao opConsultDao; private final DiagnosticReportService diagnosticReportService; + private static Logger logger = LogManager.getLogger(ConsultationService.class); + public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; public static Set conceptNames = new HashSet<>(Arrays.asList("Image","Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", @@ -165,7 +169,8 @@ private Map> getEncounterListMapForOrders(List ord } private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { - if (physicalExamination.getGroupMembers().size() > 0) { + logger.warn("getGroupMembersOfObs ----- "+physicalExamination.getConcept().getName()+" ------ class ------ "+physicalExamination.getConcept().getConceptClass().getName()); + if (physicalExamination.getGroupMembers().size() > 0 && !CONCEPT_DETAILS_CONCEPT_CLASS.equals(physicalExamination.getConcept().getConceptClass().getName())) { for (Obs groupMember : physicalExamination.getGroupMembers()) { if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; getGroupMembersOfObs(groupMember, groupMembers); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index ec58ab0a..1fce3d72 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,5 +1,7 @@ package org.bahmni.module.hip.web.service; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.model.OpenMrsCondition; import org.hibernate.Hibernate; @@ -59,6 +61,8 @@ public class FHIRResourceMapper { private final EncounterTranslatorImpl encounterTranslator; private final ObservationTranslatorImpl observationTranslator; public static Set conceptNames = new HashSet<>(Arrays.asList("Follow up Date", "Additional Advice on Discharge", "Discharge Summary, Plan for follow up")); + public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; + private static Logger logger = LogManager.getLogger(FHIRResourceMapper.class); @Autowired public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator, EncounterTranslatorImpl encounterTranslator, ObservationTranslatorImpl observationTranslator) { @@ -229,8 +233,15 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie public Observation mapToObs(Obs obs) { Concept concept = initializeEntityAndUnproxy(obs.getConcept()); obs.setConcept(concept); + if (obs.getGroupMembers().size() > 0 && CONCEPT_DETAILS_CONCEPT_CLASS.equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { + Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; + groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); + obs.setValueText(groupMembersArray[2].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[0].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); + logger.warn("obs.getConcept().getName() ----- "+obs.getConcept().getName()); + } Observation observation = observationTranslator.toFhirResource(obs); observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); + logger.warn("observation.getValue() ----- "+observation.getValue()); return observation; } From 9e63c07a4bce31ee9c422003b5464562a9dad74a Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Fri, 28 Oct 2022 16:44:50 +0530 Subject: [PATCH 243/264] BAH-2433 | Added logs to track --- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 1fce3d72..0952e765 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -236,6 +236,7 @@ public Observation mapToObs(Obs obs) { if (obs.getGroupMembers().size() > 0 && CONCEPT_DETAILS_CONCEPT_CLASS.equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); + logger.warn("obs.getValueText() ----- "+obs.getValueText()); obs.setValueText(groupMembersArray[2].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[0].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); logger.warn("obs.getConcept().getName() ----- "+obs.getConcept().getName()); } From 62100df2a56dc1796c1ba51ac6243c8e29584d32 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Fri, 28 Oct 2022 17:02:42 +0530 Subject: [PATCH 244/264] BAH-2433 | removed logs and feature branch from trigger --- .github/workflows/build_and_upload.yml | 1 - .../org/bahmni/module/hip/web/model/FhirOPConsult.java | 10 ---------- .../module/hip/web/service/ConsultationService.java | 4 ---- .../module/hip/web/service/FHIRResourceMapper.java | 6 ------ 4 files changed, 21 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index dadbba71..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,7 +7,6 @@ on: push: branches: - master - - BAH-2433 workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index 657a5a43..9d48df6f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.model; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.web.service.FHIRResourceMapper; import org.bahmni.module.hip.web.service.FHIRUtils; import org.hl7.fhir.r4.model.Condition; @@ -19,7 +17,6 @@ import org.hl7.fhir.r4.model.ServiceRequest; import org.openmrs.EncounterProvider; -import org.openmrs.Obs; import java.util.List; import java.util.Date; @@ -44,7 +41,6 @@ public class FhirOPConsult { private final Procedure procedure; private final List patientDocuments; private final List serviceRequest; - private static Logger logger = LogManager.getLogger(FhirOPConsult.class); public FhirOPConsult(List chiefComplaints, List medicalHistory, Date visitTimeStamp, @@ -112,14 +108,8 @@ public static FhirOPConsult fromOpenMrsOPConsult(OpenMrsOPConsult openMrsOPConsu for(int i=0;i fhirObservationList = openMrsOPConsult.getObservations().stream(). map(fhirResourceMapper::mapToObs).collect(Collectors.toList()); - for(Observation obs:fhirObservationList) { - logger.warn("fhirObservationList ----- " + obs.getValue()); - } Procedure procedure = openMrsOPConsult.getProcedure() != null ? fhirResourceMapper.mapToProcedure(openMrsOPConsult.getProcedure()) : null; List patientDocuments = openMrsOPConsult.getPatientDocuments().stream(). diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 08203e28..3cd976cd 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.service; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.api.dao.ConsultationDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.bahmni.module.hip.web.model.OpenMrsCondition; @@ -31,7 +29,6 @@ public class ConsultationService { private final ConsultationDao consultationDao; private final OPConsultDao opConsultDao; private final DiagnosticReportService diagnosticReportService; - private static Logger logger = LogManager.getLogger(ConsultationService.class); public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; public static Set conceptNames = new HashSet<>(Arrays.asList("Image","Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", @@ -169,7 +166,6 @@ private Map> getEncounterListMapForOrders(List ord } private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { - logger.warn("getGroupMembersOfObs ----- "+physicalExamination.getConcept().getName()+" ------ class ------ "+physicalExamination.getConcept().getConceptClass().getName()); if (physicalExamination.getGroupMembers().size() > 0 && !CONCEPT_DETAILS_CONCEPT_CLASS.equals(physicalExamination.getConcept().getConceptClass().getName())) { for (Obs groupMember : physicalExamination.getGroupMembers()) { if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 0952e765..cb76c5f8 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -1,7 +1,5 @@ package org.bahmni.module.hip.web.service; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; import org.bahmni.module.hip.Config; import org.bahmni.module.hip.web.model.OpenMrsCondition; import org.hibernate.Hibernate; @@ -62,7 +60,6 @@ public class FHIRResourceMapper { private final ObservationTranslatorImpl observationTranslator; public static Set conceptNames = new HashSet<>(Arrays.asList("Follow up Date", "Additional Advice on Discharge", "Discharge Summary, Plan for follow up")); public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; - private static Logger logger = LogManager.getLogger(FHIRResourceMapper.class); @Autowired public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator, EncounterTranslatorImpl encounterTranslator, ObservationTranslatorImpl observationTranslator) { @@ -236,13 +233,10 @@ public Observation mapToObs(Obs obs) { if (obs.getGroupMembers().size() > 0 && CONCEPT_DETAILS_CONCEPT_CLASS.equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); - logger.warn("obs.getValueText() ----- "+obs.getValueText()); obs.setValueText(groupMembersArray[2].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[0].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); - logger.warn("obs.getConcept().getName() ----- "+obs.getConcept().getName()); } Observation observation = observationTranslator.toFhirResource(obs); observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); - logger.warn("observation.getValue() ----- "+observation.getValue()); return observation; } From 5577772596f318448413642a354f14326ecb2d82 Mon Sep 17 00:00:00 2001 From: SanoferSameera Date: Mon, 31 Oct 2022 11:45:26 +0530 Subject: [PATCH 245/264] BAH-2371 | Add. To add notes in patient document --- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 1 + 1 file changed, 1 insertion(+) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index ec58ab0a..4bbe9e9f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -165,6 +165,7 @@ public DocumentReference mapToDocumentDocumentReference(Obs obs) { DocumentReference documentReference = new DocumentReference(); documentReference.setId(obs.getUuid()); documentReference.setStatus(Enumerations.DocumentReferenceStatus.CURRENT); + documentReference.setDescription(obs.getComment()); List contents = new ArrayList<>(); try { List attachments = getAttachments(obs); From 8e0454c8e1c3ca62700661b70f049343fa71c179 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Mon, 31 Oct 2022 16:53:03 +0530 Subject: [PATCH 246/264] BAH-2433 | refactor. updated the concept class name as a config --- api/src/main/java/org/bahmni/module/hip/Config.java | 1 + .../java/org/bahmni/module/hip/web/model/FhirOPConsult.java | 1 - .../bahmni/module/hip/web/service/ConsultationService.java | 4 ++-- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index bf25e526..5526b465 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -31,6 +31,7 @@ public enum Config { LAB_ORDER( "Lab Order"), IMAGE("Image"), PATIENT_VIDEO("Patient Video"), + CONCEPT_DETAILS_CONCEPT_CLASS("Concept Details"), //Physical_Examination_Ignoring_Form_List Forms_To_Ignore_In_Physical_Examination("Discharge Summary, Death Note, Delivery Note, Opioid Substitution Therapy - Intake, Opportunistic Infection, " + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java index 9d48df6f..130d91ff 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/model/FhirOPConsult.java @@ -17,7 +17,6 @@ import org.hl7.fhir.r4.model.ServiceRequest; import org.openmrs.EncounterProvider; - import java.util.List; import java.util.Date; import java.util.Objects; diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index 3cd976cd..b27ef1cf 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -1,5 +1,6 @@ package org.bahmni.module.hip.web.service; +import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.ConsultationDao; import org.bahmni.module.hip.api.dao.OPConsultDao; import org.bahmni.module.hip.web.model.OpenMrsCondition; @@ -29,7 +30,6 @@ public class ConsultationService { private final ConsultationDao consultationDao; private final OPConsultDao opConsultDao; private final DiagnosticReportService diagnosticReportService; - public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; public static Set conceptNames = new HashSet<>(Arrays.asList("Image","Tuberculosis, Treatment Plan","Tuberculosis, Next Followup Visit","Tuberculosis, Plan for next visit","Tuberculosis, Patient Category","Current Followup Visit After", "Tuberculosis, Plan for next visit","Malaria, Parents Name","Malaria, Death Date", "Childhood Illness, Vitamin A Capsules Provided","Childhood Illness, Albendazole Given","Childhood Illness, Referred out", @@ -166,7 +166,7 @@ private Map> getEncounterListMapForOrders(List ord } private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { - if (physicalExamination.getGroupMembers().size() > 0 && !CONCEPT_DETAILS_CONCEPT_CLASS.equals(physicalExamination.getConcept().getConceptClass().getName())) { + if (physicalExamination.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(physicalExamination.getConcept().getConceptClass().getName())) { for (Obs groupMember : physicalExamination.getGroupMembers()) { if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; getGroupMembersOfObs(groupMember, groupMembers); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index cb76c5f8..aeb91fae 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -59,7 +59,6 @@ public class FHIRResourceMapper { private final EncounterTranslatorImpl encounterTranslator; private final ObservationTranslatorImpl observationTranslator; public static Set conceptNames = new HashSet<>(Arrays.asList("Follow up Date", "Additional Advice on Discharge", "Discharge Summary, Plan for follow up")); - public static final String CONCEPT_DETAILS_CONCEPT_CLASS = "Concept Details"; @Autowired public FHIRResourceMapper(PatientTranslator patientTranslator, PractitionerTranslatorProviderImpl practitionerTranslatorProvider, MedicationRequestTranslator medicationRequestTranslator, MedicationTranslator medicationTranslator, EncounterTranslatorImpl encounterTranslator, ObservationTranslatorImpl observationTranslator) { @@ -230,7 +229,7 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie public Observation mapToObs(Obs obs) { Concept concept = initializeEntityAndUnproxy(obs.getConcept()); obs.setConcept(concept); - if (obs.getGroupMembers().size() > 0 && CONCEPT_DETAILS_CONCEPT_CLASS.equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { + if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); obs.setValueText(groupMembersArray[2].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[0].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); From 6738f06bc29a03027ad69f84f53ffd88e213c2e7 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Tue, 1 Nov 2022 16:59:07 +0530 Subject: [PATCH 247/264] BAH-2433 | fix to display chief complaint as single data in hiu --- .../org/bahmni/module/hip/web/service/ConsultationService.java | 2 +- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java index b27ef1cf..e51112f9 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ConsultationService.java @@ -166,7 +166,7 @@ private Map> getEncounterListMapForOrders(List ord } private void getGroupMembersOfObs(Obs physicalExamination, List groupMembers) { - if (physicalExamination.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(physicalExamination.getConcept().getConceptClass().getName())) { + if (physicalExamination.getGroupMembers().size() > 0 && !Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(physicalExamination.getConcept().getConceptClass().getName())) { for (Obs groupMember : physicalExamination.getGroupMembers()) { if (conceptNames.contains(groupMember.getConcept().getDisplayString())) continue; getGroupMembersOfObs(groupMember, groupMembers); diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index e5b226e0..28810304 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -233,7 +233,7 @@ public Observation mapToObs(Obs obs) { if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); - obs.setValueText(groupMembersArray[2].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[0].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); + obs.setValueText(groupMembersArray[0].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[2].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); } Observation observation = observationTranslator.toFhirResource(obs); observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); From 45c6ece6e83aacdf819e6d10a9079c9a09b30eee Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 2 Nov 2022 13:01:44 +0530 Subject: [PATCH 248/264] BAH-2433 | removed custom message building for chief complaint --- .github/workflows/build_and_upload.yml | 1 + .../module/hip/web/service/FHIRResourceMapper.java | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index a64ef6aa..966eb03f 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,6 +7,7 @@ on: push: branches: - master + - BAH-2433-fix workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 28810304..26871abb 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -230,11 +230,11 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie public Observation mapToObs(Obs obs) { Concept concept = initializeEntityAndUnproxy(obs.getConcept()); obs.setConcept(concept); - if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { - Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; - groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); - obs.setValueText(groupMembersArray[0].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[2].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); - } +// if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { +// Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; +// groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); +// obs.setValueText(groupMembersArray[0].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[2].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); +// } Observation observation = observationTranslator.toFhirResource(obs); observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); return observation; From 2c83e521367d3d1aea44107ff96225bc660a8552 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 2 Nov 2022 13:45:46 +0530 Subject: [PATCH 249/264] BAH-2433 | fixed. custom display message for chief complaint data in the bundle --- .../java/org/bahmni/module/hip/Config.java | 3 +++ .../hip/web/service/FHIRResourceMapper.java | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/org/bahmni/module/hip/Config.java b/api/src/main/java/org/bahmni/module/hip/Config.java index 5526b465..df97053f 100644 --- a/api/src/main/java/org/bahmni/module/hip/Config.java +++ b/api/src/main/java/org/bahmni/module/hip/Config.java @@ -32,6 +32,9 @@ public enum Config { IMAGE("Image"), PATIENT_VIDEO("Patient Video"), CONCEPT_DETAILS_CONCEPT_CLASS("Concept Details"), + CHIEF_COMPLAINT_CODED("Chief Complaint Coded"), + SIGN_SYMPTOM_DURATION("Sign/symptom duration"), + CHIEF_COMPLAINT_DURATION("Chief Complaint Duration"), //Physical_Examination_Ignoring_Form_List Forms_To_Ignore_In_Physical_Examination("Discharge Summary, Death Note, Delivery Note, Opioid Substitution Therapy - Intake, Opportunistic Infection, " + diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 26871abb..00d19c86 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -24,6 +24,7 @@ import org.hl7.fhir.r4.model.Enumerations; import org.hl7.fhir.r4.model.Annotation; import org.hl7.fhir.r4.model.MarkdownType; +import org.hl7.fhir.r4.model.StringType; import org.openmrs.DrugOrder; import org.openmrs.EncounterProvider; @@ -230,12 +231,19 @@ public Condition mapToCondition(OpenMrsCondition openMrsCondition, Patient patie public Observation mapToObs(Obs obs) { Concept concept = initializeEntityAndUnproxy(obs.getConcept()); obs.setConcept(concept); -// if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { -// Obs[] groupMembersArray = new Obs[obs.getGroupMembers().size()]; -// groupMembersArray = obs.getGroupMembers().toArray(groupMembersArray); -// obs.setValueText(groupMembersArray[0].getValueCoded().getDisplayString() + " " + "since" + " " + groupMembersArray[2].getValueNumeric() + " " + groupMembersArray[1].getValueCoded().getDisplayString()); -// } Observation observation = observationTranslator.toFhirResource(obs); + if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { + String chiefComplaintCoded = null, signOrSymptomDuration = null, chiefComplaintDuration = null; + for (Obs childObs : obs.getGroupMembers()) { + if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_CODED.getValue())) + chiefComplaintCoded = childObs.getValueCoded().getDisplayString(); + if(childObs.getConcept().getName().getName().equals(Config.SIGN_SYMPTOM_DURATION.getValue())) + signOrSymptomDuration = childObs.getValueNumeric().toString(); + if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_DURATION.getValue())) + chiefComplaintDuration = childObs.getValueCoded().getDisplayString(); + } + observation.setValue(new StringType(chiefComplaintCoded + " " + "since" + " " + signOrSymptomDuration + " " + chiefComplaintDuration)); + } observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); return observation; } From 8bfe1ad92d56fb6d576731d90ecd74910e59bc9b Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 2 Nov 2022 15:43:09 +0530 Subject: [PATCH 250/264] BAH-2433 | removed feature branch from trigger --- .github/workflows/build_and_upload.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build_and_upload.yml b/.github/workflows/build_and_upload.yml index 966eb03f..a64ef6aa 100644 --- a/.github/workflows/build_and_upload.yml +++ b/.github/workflows/build_and_upload.yml @@ -7,7 +7,6 @@ on: push: branches: - master - - BAH-2433-fix workflow_dispatch: env: ORG_NAME: BahmniIndiaDistro From b2b5dd9b80e9030e3a211de7485c9416eeb45dbd Mon Sep 17 00:00:00 2001 From: kavitha-sundararajan <90255023+kavitha-sundararajan@users.noreply.github.com> Date: Wed, 2 Nov 2022 16:42:24 +0530 Subject: [PATCH 251/264] BAH-2509 | fixed duplication of reports when there is multiple encounters (#85) --- .../module/hip/web/service/DiagnosticReportService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java index db8ba9c1..28d69d43 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/DiagnosticReportService.java @@ -134,9 +134,10 @@ private List getLabResults(Patient patient, List Map> groupedByOrderUUID = results.getResults().stream().collect(Collectors.groupingBy(LabOrderResult::getOrderUuid)); List labResults = new ArrayList<>(); - Map> labRecordsMap = new HashMap<>(); + Map> labRecordsMap; for (Map.Entry> map : orderedTestUploads.entrySet()) { + labRecordsMap = new HashMap<>(); for (Obs obs: map.getValue()) { labRecordsMap.put(obs,groupedByOrderUUID.get(obs.getOrder().getUuid())); } @@ -149,6 +150,7 @@ private List getLabResults(Patient patient, List } for (Map.Entry> map : unorderedUploads.entrySet()) { + labRecordsMap = new HashMap<>(); putAllUnOrderedObsUploadsIntoMap(unorderedUploads.get(map.getKey()),labRecordsMap); labResults.add(new OpenMrsLabResults(map.getKey(),map.getKey().getPatient(),labRecordsMap)); } From 19ef139a8fb097c39f4dab5b8af1bf292a12960f Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Wed, 2 Nov 2022 17:07:15 +0530 Subject: [PATCH 252/264] BAH-2433 | refactor. extracted the message building in separate method --- .../hip/web/service/FHIRResourceMapper.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index 00d19c86..d91cdac3 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -233,16 +233,7 @@ public Observation mapToObs(Obs obs) { obs.setConcept(concept); Observation observation = observationTranslator.toFhirResource(obs); if (obs.getGroupMembers().size() > 0 && Config.CONCEPT_DETAILS_CONCEPT_CLASS.getValue().equals(obs.getConcept().getConceptClass().getName()) && obs.getFormFieldNamespace() != null) { - String chiefComplaintCoded = null, signOrSymptomDuration = null, chiefComplaintDuration = null; - for (Obs childObs : obs.getGroupMembers()) { - if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_CODED.getValue())) - chiefComplaintCoded = childObs.getValueCoded().getDisplayString(); - if(childObs.getConcept().getName().getName().equals(Config.SIGN_SYMPTOM_DURATION.getValue())) - signOrSymptomDuration = childObs.getValueNumeric().toString(); - if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_DURATION.getValue())) - chiefComplaintDuration = childObs.getValueCoded().getDisplayString(); - } - observation.setValue(new StringType(chiefComplaintCoded + " " + "since" + " " + signOrSymptomDuration + " " + chiefComplaintDuration)); + observation.setValue(new StringType(getCustomDisplayStringForChiefComplaint(obs.getGroupMembers()))); } observation.addNote(new Annotation(new MarkdownType(obs.getComment()))); return observation; @@ -306,4 +297,17 @@ public static T initializeEntityAndUnproxy(T entity) { } return entity; } + + public String getCustomDisplayStringForChiefComplaint(Set groupMembers) { + String chiefComplaintCoded = null, signOrSymptomDuration = null, chiefComplaintDuration = null; + for (Obs childObs : groupMembers) { + if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_CODED.getValue())) + chiefComplaintCoded = childObs.getValueCoded().getDisplayString(); + if(childObs.getConcept().getName().getName().equals(Config.SIGN_SYMPTOM_DURATION.getValue())) + signOrSymptomDuration = childObs.getValueNumeric().toString(); + if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_DURATION.getValue())) + chiefComplaintDuration = childObs.getValueCoded().getDisplayString(); + } + return (chiefComplaintCoded + " " + "since" + " " + signOrSymptomDuration + " " + chiefComplaintDuration); + } } From a8830226185e0a1a5eac8255921856574a4e9eb9 Mon Sep 17 00:00:00 2001 From: Kavitha S Date: Thu, 3 Nov 2022 19:15:51 +0530 Subject: [PATCH 253/264] BAH-2433 | formatted decimal value in chief complaint custom message --- .../org/bahmni/module/hip/web/service/FHIRResourceMapper.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java index d91cdac3..69ab197f 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/FHIRResourceMapper.java @@ -304,7 +304,7 @@ public String getCustomDisplayStringForChiefComplaint(Set groupMembers) { if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_CODED.getValue())) chiefComplaintCoded = childObs.getValueCoded().getDisplayString(); if(childObs.getConcept().getName().getName().equals(Config.SIGN_SYMPTOM_DURATION.getValue())) - signOrSymptomDuration = childObs.getValueNumeric().toString(); + signOrSymptomDuration = String.valueOf(Math.round(childObs.getValueNumeric())); if(childObs.getConcept().getName().getName().equals(Config.CHIEF_COMPLAINT_DURATION.getValue())) chiefComplaintDuration = childObs.getValueCoded().getDisplayString(); } From c25a2a172f8834b830db559b14839eb11765a41e Mon Sep 17 00:00:00 2001 From: Siva Reddy Date: Wed, 7 Dec 2022 12:18:16 +0530 Subject: [PATCH 254/264] BAH-2536 | Patient Dao changes from Bahmni Commons --- omod/pom.xml | 5 ++ .../web/service/ExistingPatientService.java | 48 +++++++++++++++++-- omod/src/main/resources/config.xml | 1 + pom.xml | 9 ++++ 4 files changed, 58 insertions(+), 5 deletions(-) diff --git a/omod/pom.xml b/omod/pom.xml index f8ab964c..57705256 100644 --- a/omod/pom.xml +++ b/omod/pom.xml @@ -84,6 +84,11 @@ + + org.bahmni.module + bahmni-commons-api + + org.projectlombok lombok diff --git a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java index f5d3fe5d..e8dba214 100644 --- a/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java +++ b/omod/src/main/java/org/bahmni/module/hip/web/service/ExistingPatientService.java @@ -1,15 +1,20 @@ package org.bahmni.module.hip.web.service; -import org.bahmni.module.bahmnicore.contract.patient.response.PatientResponse; -import org.bahmni.module.bahmnicore.dao.PatientDao; +import org.apache.commons.lang3.StringUtils; +import org.bahmni.module.bahmnicommons.api.contract.patient.PatientSearchParameters; +import org.bahmni.module.bahmnicommons.api.contract.patient.response.PatientResponse; +import org.bahmni.module.bahmnicommons.api.dao.PatientDao; +import org.bahmni.module.bahmnicommons.api.visitlocation.BahmniVisitLocationServiceImpl; import org.bahmni.module.hip.Config; import org.bahmni.module.hip.api.dao.ExistingPatientDao; import org.bahmni.module.hip.web.client.model.Status; import org.bahmni.module.hip.web.model.ExistingPatient; +import org.openmrs.Location; import org.openmrs.Patient; import org.openmrs.PatientIdentifier; import org.openmrs.api.LocationService; import org.openmrs.api.PatientService; +import org.openmrs.api.context.Context; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import java.util.function.Supplier; @Service @@ -130,9 +136,11 @@ private List getPatients(String patientName, int patientYearOfB } private List filterPatientsByName(String patientName) { - return patientDao.getPatients("", patientName, null, null, "", 100, 0, - null, "", null, null, null, - locationService.getLocation(Config.LOCATION.getValue()).getUuid(), false, false); + PatientSearchParameters searchParameters = getPatientSearchParameters(patientName); + Supplier visitLocation = () -> getVisitLocation(searchParameters.getLoginLocationUuid()); + Supplier> configuredAddressFields = () -> patientDao.getConfiguredPatientAddressFields(); + + return patientDao.getPatients(searchParameters, visitLocation, configuredAddressFields); } @@ -219,4 +227,34 @@ public boolean isHealthIdVoided(String uuid){ } return false; } + + private PatientSearchParameters getPatientSearchParameters(String patientName) { + PatientSearchParameters searchParameters = new PatientSearchParameters(); + searchParameters.setIdentifier(""); + searchParameters.setName(patientName); + searchParameters.setCustomAttribute(null); + + searchParameters.setAddressFieldName(null); + searchParameters.setAddressFieldValue(""); + searchParameters.setLength(100); + searchParameters.setStart(0); + + searchParameters.setPatientAttributes(null); + searchParameters.setProgramAttributeFieldName(""); + searchParameters.setProgramAttributeFieldValue(null); + searchParameters.setAddressSearchResultFields(null); + searchParameters.setPatientSearchResultFields(null); + + searchParameters.setLoginLocationUuid(locationService.getLocation(Config.LOCATION.getValue()).getUuid()); + searchParameters.setFilterPatientsByLocation(false); + searchParameters.setFilterOnAllIdentifiers(false); + return searchParameters; + } + private Location getVisitLocation(String loginLocationUuid) { + if (StringUtils.isBlank(loginLocationUuid)) { + return null; + } + BahmniVisitLocationServiceImpl bahmniVisitLocationService = new BahmniVisitLocationServiceImpl(Context.getLocationService()); + return bahmniVisitLocationService.getVisitLocation(loginLocationUuid); + } } diff --git a/omod/src/main/resources/config.xml b/omod/src/main/resources/config.xml index 81f0fe08..32da3c89 100644 --- a/omod/src/main/resources/config.xml +++ b/omod/src/main/resources/config.xml @@ -25,6 +25,7 @@ org.openmrs.module.fhir2 org.openmrs.module.emrapi org.bahmni.module.bahmnicore + org.bahmni.module.bahmnicommons