Patient Merge Enhancement is a project that is related to mUzima and is led by @mssavai and me. Ours is to create a UI on the OpenMRS side to allow data managers to review and resolve (either by creating a new patient record or merge existing patient record) within the same EMR which is totally different from Merge Patient data from Multiple Installations.
I have gone through in this project past days and I have to clarify following facts
should we create a new module for this project
What we have to implement are java classes that get patient data from multiple places and merge the into one master database and build a api(think basically a gui) for return data am I right??
@dkayiwa is that all should we know about this project? If there are any information that we should know about this project can you tell us because I am going to start to write my proposal. your guidance is much appreciated
I am Milan, a final year undergraduate at the University of Moratuwa. I am contributing with OpenMRS since 2015 and worked with several tasks and issues. I am happy to say, I have completed my first GSoC project with OpenMRS (Support Laboratory Data Exchange with FHIR) at 2015. I would like to give my contribution to work on this project this year also.
Hi,
I have some clarification about the module. We can implement modules are as follows,
Implement two modules
Master module: Only install on master(father) database server
Child module: Only install on child database server
Implement slave and master functions within the same module.
Implement both functions within the same module and I can be deployed on every database server.
@dkayiwa@ssmusoke could I please clarify what is the best way of implementing modules?
As @dkayiwa mentioned above, all the data from slave OpenMRS instance need to be merge and sync patients, encounters, and observations from multiple instances into a the given master OpenMRS instance for Analysis and Reporting (may store in read-only form).
As I can understand, thereās two type of functionalities in the module.
Client instance running on the Slave nodes (OpenMRS instances)
These clients will use by the master to retrieved patients, encounters, and observations of particular instance. As itās requested in the project idea, client will encrypt the data while transmission.
Master instance running on a given Master node (save data as read-only, used reporting and analysis purposes)
This instance of master will retrieve data from client nodes, and use a set of rules to merge the available data of patients, encounters, and observations.
@dkayiwa, @ssmusoke correct me if Iām wrong about getting the problem.
@samuel34, As we can see above in order to implement this feature, I think we need above functionalities and that kind of architecture.
So what I tried to ask was, in that case we can have them as separate modules Or merge as a single module which has both functionalities?
Event we implement this as a single module, we have to select on as the master node which will save the merged data. In that case, Iām asking whatās the preferred way to do it?
I understand what your trying to insinuate @milan . All the features you mention are right and are part of the project objectives. But development should and can possibly be in a single module. The same module will be in position to export( with encryption possibilities from child node) and also import (merge the data to master DB) data.
He asked the above question . And he was given the reply below
But all I think, all functionalities should be bundled in a single module.
Thank for confirming that, I have got the objectives of the project right, and your support regarding understanding the project.
Yes, I have look into those answers. But is there any reason to have it as a single module ? (e.g. easy installation for the user etcā¦).
At the same time, Iām wondering what would be the advantage if we implement those two objectives as two modules s.t. merge_module-server, and merge_module-client. As I can see,
The Architecture is more modularized and separate of concerns
When itās going to merge data from different client/slave nodes in to a server/master node, it follows the architecture of client-server or master-slave. Since these two are focus on two different concerns, itās better to have them as two modules.
As an example, if we consider Apache Thrift, in itās home pageās example, you can see that, for a given Thrift definition file, itās creating two different files s.t. Python Client and Java Server. So, it has modularize the two functions into two separate files. Otherwise, if they create each as single file, then the output will be Python File and Java File.
In the instruction of using these modules, we can say to user like,
"Install the merge_module-client on OpenMRS instances which data need to be push into master server, and install merge_module-server on the OpenMRS instance that store the data merged from client nodes."
If itās a single, module, user has to configure the modules on client OpenMRS instances as clients, and need to configure the module on the master OpenMRS instance as master.
Independent of upgrade for decoupled modules
Since the functionalities are decoupled, in such a case of upgrade on module can be done independently. Let say thereās an upgrade on merge_module-server. In that case, we donāt need to update the client nodes.
These are some thoughts on advantages of having two modules. Anyway thatās depending on user preference. What do you think ? any suggestions ?