How I participated in the creation of information systems for medicine


Few words about myself

In 1987, I graduated with honors from the instrument-making department of the Chelyabinsk Polytechnic Institute with a degree in Automation and Telemechanics, although I planned to become a theoretical physicist and graduated from school at a specialized boarding school No. 18 at Moscow State University. By distribution, he got into a specialized design bureau and until 1991 he developed electronic components for armored vehicles. I still think that the engineering school received at the same time is something unattainable in modern realities. In particular, my colleagues and I created a combined analog-digital programmable complex that performed real-time calculations on the mathematical model of an object described by a system of differential equations of the 4th order with 14 non-linear elements and made decisions more than 10 thousand times per second. On modern computers, this probably could have been done, but at that time we solved the problem with only a set of integrated circuits at our disposal, the coolest of which was a 2 kilobyte ROM and all our creativity had to fit in 9 liters of volume and work in the range temperatures from -40 to +85.

After the country collapsed in 1991, I chose the path of programming and since then, in one way or another, I have been involved in software development and building large information systems. He started with the creation of complex software and a “smart cash register” for a shopping center, then there was an information system for accounting for the lease of municipal property. Then I returned to the design bureau for a project that was considered hopeless to create a complex of diagnostic stands for automated troubleshooting in electronic components in the interests of a foreign customer. After the development was completed, I led a development team that handed over these stands to the customer, and we coped with this task.

After this invaluable experience, I was the technical director of a commercial software development company, and here I had to plunge into the subject area of ​​information systems for medicine for the first time.

Beginning to think about problems

Among several serious projects under development (there was a “Smart City” with car number recognition systems, and the logistics of vehicles of a metallurgical plant and …) there was a special project to create a unified information and analytical health care system for the Chelyabinsk region.

The first stage under the contract with the Ministry of Health was the creation of a technical project – a very rare occurrence in modern times, since the result was only a paper report. Write to yourself whatever you want for your pleasure and it is almost impossible to check how well you have fulfilled the terms of the contract. But we approached the issue quite scrupulously and analyzed all the available world experience in creating large medical information systems.

The first object of in-depth research was, of course, the most common set of standards at that time HL7. Studying it and a bunch of standards accompanying it, we began to fall into despair – the number of terms and connections necessary for at least the minimum functionality of one medical institution exceeded our ability to comprehend them, and even more so to implement them, by orders of magnitude. The health system (as it is needed specifically to improve the health of the population) covers a huge number of diverse activities, each of which has its own extensive subject areas. And the HL7 standard, at least in the form in which it was at the time of our analysis (now it seems to have changed a lot, I did not specify), was a conglomerate of standards at all levels of the OSI model. When trying to cover all the necessary aspects, the project turned into such a grandiose heap of little interconnected parts that only our descendants would have to undertake its implementation.

In the course of searching for possible alternatives and working solutions, we came across a little-known set of standards at that time Open EHR. The approaches laid down in it made it possible to streamline development well, cover all the necessary areas of promising developments and make it possible to implement individual parts as an all-encompassing information system develops. The disadvantages were that the only developer at the time (he is also the compiler and manager of the standard), was in Australia and requested payment for any of his services that was unbearable for Russian subjects. He provided good tools for designing information systems based on his standards, but the cost of licenses for these tools made development based on them never payable.

Finding a solution

From a technical point of view, the set of OpenEHR standards is a set of rules for the creation and evolution of complex, interrelated data types, a language for constructing universal queries for data that are instances of such types, and a set of requirements for information systems to ensure their interaction with each other, provided that they are not required to care about compatibility with each other. It was very similar to the ideas laid down during the development set of XML standards. Consortium standards only W3C are unified and apply not only to medicine.

As a result, we formed a project based on an approach that puts a universal “XML engine” at the center of the entire structure, and its specialization for a medical project was carried out by modifying the java implementation of the OpenEHR standard to use this “universal engine” in all possible places. Company Ocean Informatics conducted its development on .Net and this implementation was distributed by them free of charge for educational purposes. Now a modified java implementation can be found here.

Implementations

As always, when there is a transition from theory to practice,

I can’t resist quoting here an aphorism attributed to Einstein

What is a theory? This is when you know how, but nothing works. What is practice? This is when everything works, but no one knows why. What is the connection between theory and practice? This is when nothing works and no one knows why.

I have to implement something very far from what I designed. In our case, the first real implementation of the approaches that were laid down in the unified information and analytical system of healthcare in the region was the system for providing certain (beneficial) categories of citizens with the necessary medicines. And the problems that came to the fore were not at all “electronic medical history”, but the combination of the accounting system of the regional pharmacy warehouse and the import / export of data from a wide variety of sources on the side of medical institutions. I believe that we coped with this task, the system was launched in more than 500 medical institutions, and at the time of my departure from the company there were no complaints about its functioning. But the mentioned “XML engine” was a completely degenerate freak.

However, the very idea that was put into the project, in a strange way, did not die. The company participating in this project on a subcontract decided to continue its own developments in this direction, significantly modified them, and even managed to participate in the introduction of medical systems in medical institutions in Moscow. Here is one of her posts on the subject..

The same problems, but in a different area

After leaving the mentioned company, I participated in many projects, tried my hand at my own business, and probably tried most of the modern technological solutions with my own hands. On a project that I recently left (a very hot project in the interests of the pension fund of the Russian Federation), I had to think again about document-oriented / hierarchical storages. If it were not for the constant time pressure and the lack of support from the management, then I would definitely try to return to the idea of ​​\u200b\u200bthe “XML engine” on this project. The main sores of this project are that almost all information entering the system is xml documents from external information systems, and the requests received by this system are not predetermined and change very often. The data storage structure created for this reminds me of Oracle’s attempt to implement XML processing in their database. Oracle, of course, approached this issue more methodically and implemented all the necessary procedures directly into the database engine (it was an attempt to present hierarchical relationships as a set of generated tables connected by joins), but she subsequently abandoned such a solution, since an attempt to load into a 10-megabyte xml-document database, led to a “freeze” for several hours, and many of the xpath queries, in principle, could not be optimized on a relational representation.

So how do you solve such problems?

In 2006, IBM published interesting document. In which the technique for executing any XPath expressions by means of relational databases is described in detail, without performance degradation on recursive procedures. They also developed a reference implementation of this approach, but I could not track the further fate of the product.

Along the way, I want to note that the standard implementations of XPath in java (xerces, xalan) there are many questions that are not easy to resolve.

In my free time, long evenings, I implemented my own solution based on the approach described in the mentioned document. Parsing XPath expressions is done by a wonderful product ANTLRnecessary for storing xml-documents and xsd-schemes of the entity, are formed by means of JPA, which makes it possible to use any relational database, a good implementation of processing XPath queries on file resources turned out to be a bonus.

Minimum Value Point solutions can be viewed at this resource. The current implementation still has many limitations (work with maps and arraysof all functions fully implemented function abs), but most of the needs for processing hierarchical documents are already provided at this level of implementation. Since this is deployed on my home workstation, on which I also do the main work, I limited the flow of processed requests (no more than 10 requests per minute, the volume of one document is no more than 1 mb), but there are no restrictions inside the processing and time measurements are taken execution of individual parts of the process.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *