Hello, One of the greatest challenges in front of the Care2x is adoption in different kinds of hospitals in different kinds of places in the world. The healthcare in different countries has different requirements. In some countries these requirements change year-by-year (or even more frequently). Even there are hospital that has their own requirements for the HIS system.
Care2x tries to be as generic as possible to fit the needs to the greatest extent of the hospitals. But it is not possible Care2x to fit the needs of all of the hospitals (or even to one of them) just out-of-the-box. For every solution Care2x has to be more or less customised. Let's take as example the solution for East Africa. The healthcare in USA and Tanzania has very significant differences. This led the developers to the idea of making separate branch (ELCT) for the East Africa solution. And they are right! The customisation of the original Care2x, however, is so big and specific, that it is hard to decide what of the features implemented in ELCT could be contributed back to the main branch. Sometimes it would need additional efforts to make new feature as general as to fit in the original Care2x branch. At the current state of the Care2x architecture branching for specific solutions is inevitable. On the other hand, keeping Care2x as generic as possible makes the process of merging features back to the main branch hardly possible. Customisation is necessity. What has to be changed in the Care2x architecture is that there should be a framework that defines strict rules how Care2x can be customised. This framework should give great flexibility for customisation and in the same time keep these customisations as closest as possible to the main branch. Actually, there should only one branch - the main branch. There is a solution for this at the moment, but for desktop applications - the Eclipse project [1]. This project defines a plugin framework where each plugin is a separate module that contributes features to the application as a whole. Plugins has dependencies between them and one plugin can customise a feature defined in its dependant plugin using the so called "extension points". I believe something similar can be done for php web applications as well. The generic HIS functionality can be implemented in basic plugins that define extension points for customising specific features. These extension point will be used by plugins for specific solutions. At the the solution for specific country or hospital will be distribution of a set of plugins. Let me visualise the idea in an example. Let's take the patient registration form. If we generalise the patient registration record it would include the following features: - system id - name - sex - date of birth - citizenship registration (citizenship id, country, address,..) - contact (phone, mail, fax, ..) - insurance info - blood group - etc. If we examine only the 'name' feature we will see that it has lots of attributes in different countries: title, first name, last name, middle name, maiden name, third name, ..., Nth name, tribe, caste, ..., whatever attributes I have never heard of. Each country uses different subset of these attributes to identify its citizens: - USA: title, first name, last name - Bulgaria: first name, middle name, last name - Tanzania: first name, fathers name, third name, tribe - India: I've heard there they have lots of names. Now let's have 'care2x_patient' plugin that defines the patient registration record model. In this plugin there will be an extension point defined for the 'name' feature. Attributes for the 'name' extension point will be contributed by other customisation plugins like: - care2x_patient_usa - contributes first name, last name, title - care2x_patient_bulgaria - first name, middle name, last name - care2x_patient_tanzania - first name, fathers name, third name, tribe At the end the solution for Tanzania will be set of plugins that include care2x_patient and care2x_patient_tanzania, but not care2x_patient_bulgaria and care2x_patient_usa. An assembler script will go through the set of plugins and will evaluate the dependencies, extension points and extension contributions. It will construct the solution-specific database schema that will be used by the installer. At runtime the extension points should be evaluated as well. For example a patient search form should lookup the attributes for the 'name' feature to decide what fields to generate in the search form. Such kind of plugins framework separates the application design from the basic code implementation. All of the Care2x design has to be migrated to models that describe each feature of the system and defines extension points for customisable ones. The basic code implementation - the framework - will actually exploit the model to provide the necessary functionality. Such separation is for good, because developers with stronger medical background can concentrate on the models, while those will stronger programming skills can work mainly on the framework. Upgrades to newer versions of Care2x will also be executed with much less problems, because the customisations are isolated in separate plugins. I want to here your opinion, suggestions and questions about this proposal. I realise that this is a major architectural change and is not achievable in short term. I am seeing it in a future major version of Care2x like 3.0. I am also planning to make a simple prototype (proof of concept) of this idea as diploma work. So, hopefully, I will be able to show you something in the near months. [1] http://www.eclipse.org/ Greetings Kaloyan Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ Care2002-developers mailing list Care2002-developers@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/care2002-developers