I will no longer aim this HOW-TO as an actual how-to. This section is deprecated and will no longer be maintained, but will not be removed.
This section is actually going to be the HOW-TO of this HOW-TO document. I intend to include instructions or refer to instruction on installing what available systems that are readily usable at this point.
I will try to be pretty cook book about how to install these applications, which means that if I can, i will always tell you what to type (at least what to type that works for me). The problem is that this assumes that you know what a shell window is and can switch directories with-in, which actually assumes a fair level of technical sophistication since most of us have gotten used to Microsoft based Windows systems. Which is to say that a lot of us only have interacted with a computer using a Graphics User Interface (Gui's), and that these installation require that you be familiar with Command Line Interfaces (CLI) like a terminal window or a shell.
If you don't know what I am talking about then I recommend you ask someone (me possibly) about what shell windows are, and probably what a UNIX-based Operating system looks like, especially without a GUI.
The OIO system starts a higher level of abstraction - starting with modeling "forms". The forms are then used to model/build progress notes etc. The OIO system makes use of a relational database back-end (PostgreSQL) - 1) making the data/metadata/presentation separation more distinct, 2) making integration with other system (e.g. legacy systems, GNUMed, SQL Clinic etc) easier, 3) making query construction/extension easier (via SQL).
If you search the OpenHealth mailing list archives, you will see extensive discussion regarding this in the context of GEHR and OIO. GEHR uses the same approach but calls this intermediate level of abstraction "archetypes". The advantage of the OIO/GEHR approach is that the metadata components can be plug-and-play - meaning that the system can be easily extended/customized AND portable medical records become easier to implement.
I can not stress how really good and how much documentation the developers of OIO have written. There are some confusing parts, especially if you are in a hurry. :) However, please read the install documentation at OIO then come back. Hopefully, I will import or streamline the documentation since, the developers want to support OIO on all distribution, whereas my slant is becoming more and more based on the Debian distribution.
One of the more aggravating things was find that Zope could not interact (connect) to the PostgreSQL database. What was happening (I will give greater detail later) is that the 'postgres' user could not be authenticated. I think this is a problem in that Krebs authentication is not installed by default. To fix this you need to cd /etc/PostgreSQL/ and find the pg_hba.conf file. Using what ever editor you like, find the bit of code that tells who can and can not access to the database. Unfortunately, the only way I could get it to work for now is to change:
local all peer sameuser
host all 127.0.0.1 255.0.0.0 ident sameuser
host all 0.0.0.0 0.0.0.0 reject
And change it to
local all trust
host all 127.0.0.1 255.0.0.0 trust
host all 0.0.0.0 0.0.0.0 reject
I ran into this problem because apparently PostgreSQL does not like the
On Sat, 2 Mar 2002 firstname.lastname@example.org wrote:
> I have reached the section that asks me to archive a form.
> I hit the 'now' button, then hit 'Create a new version' and i get the
> follow error:
> This is the source of it the html page:
> <strong>Error Value: ERROR: Bad timestamp external representation
> '2002/02/03 17:22:58 US/Pacific'
I ran into this same problem after the end of day light savings time. :-)
The reason for this is that PostgreSQL does not like US/Pacific for time
zone. The fix is to provide the time stamp in GMT time.
The fix is to add the following to the OIO/forms/archive_form/archive_b
<dtml-call "REQUEST.set('time_string', _.str(time.toZone('GMT')))">
(it goes right before the following, make sure time=time_string in the
So, basically the new routine converts the time stamp into GMT time - I
think GMT-7 or GMT-8 for US/Pacific, depending on daylight saving time
Andrew P. Ho, M.D.
OIO: Open Infrastructure for Outcomes
Note that in the originally distribution of OIO you only see 'time=time', when you are change the source code on this page, so make sure to make it time=time_string.
I am told that this will be fixed in the next release 1.0
Note that Zope has changed its default port from 8080 to 9673 to avoid conflicts with the proxy server. You will not be able to get OIO to run correctly if you don't specify the correct ports that Zope is using. You can correct these by clicking on the main OIO folder, and selecting the Properties. Or you add /manage to the end of you OIO URL. For instance http://localhost:8673/OIO becomes http://localhost:9673/OIO/manage
You are looking for field base_URL and form_URL and you will see that OIO has port 8080 set up as the default. You need to change this number to 9673.
This is the second application that I see that I think is actually useful for the medical office. (One of my main concerns, as I will be using it exactly for that.)
You can get the entire package which include everything you need like Zope products and even python from Here and choosing FreePM-1.0b6-FULL-linux2-x86.tar.gz. This will include all the documentation.
Given that Tim Cook has put together everything you need to get a fully running FreePM application, I will first deal with installing the application as if you downloaded the full 14MB gzipped file. However, since Zope can be installed separately, and you may have other Zope applications going on, I will also discuss how to install the FreePM Zope product separately from installing Zope.
Once you have downloaded the 14 MB package, be sure to also download the extensions_for_1.0b6.tar.gz. At this point, it really doesn't matter what directory you have download the gzipped tar files into, but to play it clean and safe, I would download them or move them into their own directory. Then go ahead and gunzip FreePM-1.0b6-FULL-linux2-x86.tar.gz to unzip the file and then tar xvf FreePM-1.0b6-FULL-linux2-x86.tar.gz
Once the tar file has finished unpacking, you should see a new directory called FreePM-1.0b6-FULL-linux2-x86. To make things easier I would change the name of this directory to 'FreePM' like so mv FreePM-1.0b6-FULL-linux2-x86 FreePM
Move the extensions_for_1.0b6.tar.gz to the newly created FreePM directory and look for the 'Extension' directory and go ahead and move it there and unpack using the tar xvf
Tim Cook was smart and kind of enough to write an install script to install the Zope. Once you are in the FreePM directory (remember, the one that you created when you untar-ed the 14MB file), you run the script by tying ./install
DON'T FORGET TO WRITE YOUR ADMIN and PASSWORD that you will at this point otherwise you will need to re-install the Zope server and determine you new password for admin
Tim Cook also wrote two scripts to start the server and stop the server. Be sure you our in the FreePM directory. You will know this if you see the files 'start' and 'stop' in there. It is also the same directory where you ran the ./install. To start the Zope server, type ./start. However you might want to type ./start& to make it a background process which will free up your terminal window. This will also allow you to stop the Zope Server by typing ./stop instead of hitting the CRTL-C key combination, a rather blunt way of stopping the Zope server and not an aesthetically pleasing way of stopping the zope process.
The key thing before I talk about installing the zope products is that, the first user, Admin, can only add other users and can not by itself actually manage any products. You first need to add a new user and make the user a manager before you can do anything else.
To log into the running Zope server, you need to open a browser, type in http://127.0.0.1:8080 or depending on how new the Zope server is http://127.0.0.1:9673. If you look at the output during the install it will tell you what to what port to connect.
Note: Using the old port 8080 would conflict, which is why Zope changed the port connection.
Go ahead and click on the link that says Zope management interface or enter http:127.0.0.1:8080/manage and you should the zope management screen. You know you are in the correct section if you see a root folder at the top of the Left Frame. To make sure we are on the same page, go ahead and click on the Root Folder icon in the right Frame.
You then should see the list of contents of the Root Folder on the Right Frame.
Look for and click on the acl_users folder. select add new user, fill in the required fields. You leave the domain field blank. And then be sure sure to select role. In this case, click on manager for this user.
I am having problems successfully logging out completely using zope, so when you intend to switch users, be sure to completely close all browser windows.
Once you added a new user that has the role of manager, log back in. That is to say, Close all browsers and open up a new browsers and go the the zope management screen. You should be asked for a login at this point. Go ahead and enter in you new user login and password.
Once you are logged in as an user (not the admin user), go ahead and click on the Root Folder on the top of the left frame. Scroll to the bottom of the Right Frame and you should see the Import/Export button. You see a new screen. In the Field Import File Name, enter FreePM Product.zexp and then hit the import button. You should see a new scree indicating success
The next step, is to again hit on the Root Folder Icon at the TOP LEFT FRAME. Again hit the Import/Export button, but this time, you want to import FreePM.zexp. Then hit the Import button.
Note that it will take some time to import the FreePM.zexp Zope product as it is quite large and you may get a browser error. I almost lost hair doing this stage because I could not figure out what was going wrong. In fact nothing was going wrong, it just took some time to import this large (32MB) zope product. If you want to make sure something is actually going on, I recommend using the top unix command, which will show you that python is actively still working to import FreePM.zexp.