gnumed-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gnumed-devel] Some suggestions to make gnumed more efficient


From: Christoph Becker
Subject: Re: [Gnumed-devel] Some suggestions to make gnumed more efficient
Date: Wed, 23 Feb 2005 20:13:37 +0100
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

Hallo Karsten,
Thank you for your detailed answer.
I tried the  bootstrapping process again and it worked a little better, but at last I was unable to install gnumed. Perhaps I should try it on a linux machine, but at the moment don't have Linux on any computer any more.
I downloaded the schema and tryed to install it via psql. With this there were (at least) the following problems:
First
A pg_dump does not dump any groups and users. Thus , if a db schema needs any users and groups to be installed, it should come with a sql-script which will install those users and groups.
Second
PLpgsql could not be installed with gnumeds schema-dump, which resulted in many errormessages. The reason seems to be that the pg_dump of gnumed contains the following statement:

CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
    AS '/usr/lib/postgresql/plpgsql.so', 'plpgsql_call_handler'
    LANGUAGE c;

This will not work on any windows machine, at least if a nativ PostgreSQL 8.01 is running.
I don't know wether this was/is a bug.  The question is which version of PostgreSQL was used to dump the gnumed-schema.
A dump done with PostgreSQL 8.01 on Windows XP works around the problem with the librarypath by using a variable $libdir instead of a Unix-like path:
CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
    AS '$libdir/plpgsql', 'plpgsql_call_handler'
    LANGUAGE c;

By the way, Dezign for Databases reports that, Gnumed has 184 Tables with 1024 Columns.
This obvious complexity, together with the difficutly to get the backend running (on Windows)  may be a bit deterrent for anybody who realy wants to develop a GUI.

Because of at least three bugs in the Dezign for Database Schema-import, I can not produce a correct database schema at the moment. At least two of this bugs can be worked arround with a filter, which is just a question of time.
I am a bit interested in Gnumed, since I have to write an appoint gui (and backend) too in the next month's.
But at the moment I have big enough problems with the new German denture regulations.

The RoteListe Windows CD  is  distributed free at least German dentists. It has an active-x-interface which should be usable from within wxPython  and it has the possibility to export data for prescriptions into a file, which can be read by other applications.

I do have LATEX forms for the German Kassenrezept and the Arbeitsunfähigkeistbescheinigung.
I attatch the texfiles. The worked with an Epson LQ630 Matrixprinter, but should work on almost any printer after adjusting the 0 point. I used the Latex picture envirement and set the lower left corner of the KVK-Data-Frame as zero point.
I should be clear, that the variable names within the stars ** should be replaced via a python script.
May be you can use them for Gnumed. I too have a form for private invoices, using the DIN-letter and the long-table envirement. By this one can write multi-page invoices. Notice that latex has to be called more than once to get nice tables with longtable.
My invoiceform  may be usefull for GPs too after some modification.
As far as I can see, a search for *.tex in gnu med does not show anything like this.
I attach some more tex-files. elab_beleg.tex  is used to write dental laboratory invoices for in office laboratory work. kvkdaten.tex and kzvstempel.tex are modules used by several forms like the Arbeistunfaehigkeisbescheiniugng und the and the prescription.

Regards
Christoph Becker

Karsten Hilbert schrieb:
Christoph,

  
After more than a year, again I did check out Gnumed, just to see how
far it has grown.
Here are some questions I asked myseld and some sugestions:
    
thanks a lot for your effort !

  
First:
Why does Gnumed not have dumps of its database-schema and a pg_dump of 
some testdata in the cvs?
    
It is not in CVS because dumps are not our primary method of
setting up a database and thus dumps are secondary, generated
data which should not be in CVS.

However, the point of your question is: Why are there no dumps
available ? This question is perfectly valid. The answer is
that I was to stupid up to now to see where they would be
useful even when Horst suggested having dumps available. The
reason I did not see the value was that I was focussed on
Horst's suggestion to use dumps for bootstrapping instead of
thinking further. They *are* of use for people who want to
tinker around with them.

Due to your suggestion I enhanced our daily cron job such that
now we offer daily snapshot database dumps. There are now:

http://salaam.homeunix.com/~ncq/gnumed/schema/...

-> gm-data-dump.sql
-> gm-schema-dump.sql
-> gm-db-dump.tgz (a tar.gz of the first two)

Those are also linked in the Wiki:

http://salaam.homeunix.com/twiki/bin/view/Gnumed/DatabaseSchema

However,
  
By this it would be a work of a minute or less 
to have the Gnumed database in the running PostrgreSQL cluster, ready to
inspect and evaluate the gnumed databasedesign.
    
this may not work because unless all dependancies are
met the dump will not easily reload. Which the bootstrapping
scripts check for and rectify. Nonetheless, the dumps are there
for your pleasure.

  
Instead anybody interested in Gnumed has to try to build a database
schema with "bootstrap" skripts
    
Wrong. Or why do you think we provide public database
access ?!?

  
- which for me at least did not
work. First I had to figure out, that I have to find the 'client'
directory, copy it to my python's site-packages, rename 'client' to
'Gnumed' and then insert an apporiate gnumed.pth file into
site-packages. OK, there are other ways too, but why don't you have a
skript doing this, or  at least a README/INSTALL, telling this?
    
There are README/INSTALL files in the very root of the
CVS tree. They don't talk about setting up a new database
because that is not for people trying GnuMed first time
around. However, the files should talk about using the
public servers. They now do.

  
Finally at least I could run a bootstrap.py which seemed to be the right
one,
    
No, and INSTALL tells you so.

  
Second:
Why does Gnumed not have a detailed graphical schema from its database?
    
a) because there are no freely available graphical schema
   generators available
b) because no one voluntuered to regularly update graphical
   schema pictures with a manual tool
c) GnuMed DOES HAVE detailed graphical schema in several formats:

   http://salaam.homeunix.com/twiki/bin/view/Gnumed/DatabaseSchema

Please tell us how we can improve the situation so
people find it.


  
When I started with my dental application I got me a graphical
database-designer-tool (http://www.datanamic.com), build the database 
and the tool produced the PostgreSQL schema, by just a very few 
mouse-clicks. I could import that schema into PostgreSQL and after some 
trials I had a reasonable base to start with devoloping the GUI.
    
Doing it that way does not allow to use advanced features of
PostgreSQL to the extent we (or at least I) want to.

  
Then I stopped using the database-designer-tool and switched over to
improve the database with EMACS in sql-Mode.
    
OK, that would work. However, we are beyond that stage
already.

  
Would I have to share the design of my database with others (as gnumed
has to do if it will stay and grow)
    
GnuMed has shared it's database schema from day -1.

  
, the most natural thing would be to
get the latest version of a reverseengineriong tool like importer script 
from datanamic.com or a comparable reversenginering tool to produce a
detailed picture/map of my database's design with the coresponding 
graphical database design tool.
    
Because someone would need to volunteer to keep this up to date.

  
Yes, Gnumed may have such a tool with autodoc, at least to some degree.
But if this works, why don't you have detailed maps and pictures of the
database-schema as jpeg and/or pdf files on the website?
    
a) we do
b) they are not as good yet as the commercial tools

  
Gnumed at first should concentrate on delivering an easy to install and 
easy to understand PostgreSQL database.
    
It does to the degree possible.

We even offer public access to a live, installed database
against which you can run any database reverse
engineering/graphical display tool YOU desire.

  
That is to say,
first offer zipped dumps in human readable text format wich can be imported in
a running Postgresql-Cluster.
    
We do. I doubt they will work as simply as you seem to
imagine. Because proper setup is more complex than you seem to
think.

  
Zip the resulting dump and place it into the cvs-tree under 'dbschema'
    
Such things do not belong into CVS unless they are the primary
database installtion source.

  
second
get you a database-reenginering tool and a graphical database designtool 
to produce a detailed graphical map/picture of the the database and 
place the maps/pictures as jepg and/or pdf files into the 'dbschema' 
directory.
    
This sounds like you are volunteering to keep it up to date ?

Also such things do not belong into CVS. They belong onto a
web site (such as the Wiki).

  
If I can get a working schema as pg_dump I can produce a gnumed schema 
with dezign for Database and it's importer script, since I will update 
to their new version.
    
Feel free any day. You don't even need US to PROVIDE a dump to
you. Why not simply dump the public database onto your machine ?
Nevertheless, we now DO provide dumps, too.

Christoph,

thanks a lot for your detailed input upon which some
improvements have immediately been based.

Karsten
  

% au.tex
% Tex-Datei zum Drucken der Arbeitsunfähigkeitsbescheinigung auf
% dem gelb/roten Kassenformular
% Author Christoph Becker, Dauner Str. 21, 53539 Kelberg, Germany
% email: address@hidden
% 4. Febr. 2005 
% Prinziep:
% Das gesamte Document besteht nur aus EINEM Bild bzw. 'picture'
% Als Ursprungskoordinate wird die rechte untere Ecke 
% des Rahmens mit den Versichertenkartenleistungen verwendet.
% Die Ursprungskoordinate kann nicht an einem Papierrand liegen, weil
% LATEX einen Seitenrand von 0 ignoriert. Von daher ist es besser bei
% Formularen einen leicht erkennbaren Ursprungspunkt im Formular zu
% benutzen. Der Ursprungspunkt wird als Schnittpunkt von oberem und
% linkem Rand eingestellt. Die Bildgroesse kann (0,0) sein.
% Alle Felder des Formulars werden als Bildelemente (vom Typ Text) plaziert 
% (Siehe Helmut Kopka, Latex - Eine Einfuehrung, Bd 1, Kap. 6, Bilder
% Alle Felder des Forumlars werden im Bezug auf die Ursprungskoordinate
% des Bildes plaziert.
% Der KZV- bzw. KV-Stempel wird mit einem Offset eingestellt, hier:  
% \newcount\stempeloffsetx \stempeloffsetx=20
% \newcount\stempeloffsety \stempeloffsety=-10
% Dadurck kann der 'Stempel' durch einfaches Kopieren auch in andere
% Kassenformulare uebernommen werden (AU, HKP usw.). Es muss dann lediglich
% der Offset geaendert werden.
%
% Das Formular wurde auf einem EPSON 630 LQ-Nadeldrucker unter WindowsXP 
% mit TeXnicCenter (auf der Miktex-Cd, sehr zu empfehlen) entwickelt.
% wenn sich auf einem anderen Drucker oder unter Linux zeigt, dass die 
% Ursprungskoordinate nicht stimmt, so kann diese ueber   
% \oddsidemargin und \topmargin angepasst werden.
% Das Einsetzen der realen Daten erfolgt z.B. ueber ein Pythonskript
% welches die *Schluesselwoerter* sucht und gegen die jeweiligen Daten 
austauscht.

% EMACS-coding: iso-latin-9-with-esc
\documentclass[10pt,a5paper]{letter}
% a6paper gibt es nicht
\pagestyle{empty}
\oddsidemargin61mm
\topmargin28mm
\headheight0mm
\headsep0mm
\topskip0mm
\textwidth146mm
\textheight104mm
\footskip0mm
\paperwidth148mm
\paperheight105mm

\newcount\rechterrand 
\newcount\stempeloffsetx
\newcount\stempeloffsety


\begin{document}
\setlength{\unitlength}{1mm}
\begin{picture}(0,0)%(80,27) % x-Koordinate tut nichts zur Sache
% y-Koordinate schiebt d. 'Bild' nach unten
%\put(0,0){.+} %Ursprungskoordinate (Unterkante KVK-DatenBlock 
\rechterrand=-77 %beliebig dicht am re Papierrand! 
\stempeloffsetx=17
\stempeloffsety=-10
% KVK-Daten und ZA-Stempel einfuegen
\input{kvkdaten.tex}
\input{kzvstempel.tex}
\put(\rechterrand,-11){*Erstbescheinigung*}
\put(-34,-11){*Folgebescheinigung*}

\put(\rechterrand,-20){*Arbeitsunfall*}
\put(-34,-20){*Durchgangsarzt*}

\put(-23,-29){*au-seit*}
\put(-23,-37){*au-bis*}
\put(-23,-45){*festgestelltam*}

\put(8,-62){*sonstUnfall*}
\put(8,-70){*Versorgungsleiden*}

% Diagnosefeld
\put(\rechterrand,-69){\parbox[t][50mm]{80mm}{*Diagnose*}}
% Erforderliche Massnahmen
\put(\rechterrand,-119){\parbox[t][20mm]{80mm}{*erforderlMassnahmen*}}
\end{picture}
\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: rezept.tex
%%% End:

% Tex-Datei zum drucken des deuschen Kassenrezeptes
% Author Christoph Becker, Dauner Str. 21, 53539 Kelberg, Germany
% email: address@hidden
% 4. Febr. 2005 
% Prinziep:
% Das gesamte Document besteht nur aus EINEM Bild bzw. 'picture'
% Als Ursprungskoordinate wird die rechte untere Ecke 
% des Rahmens mit den Versichertenkartenleistungen verwendet.
% Die Ursprungskoordinate kann nicht an einem Papierrand liegen, weil
% LATEX einen Seitenrand von 0 ignoriert. Von daher ist es besser bei
% Formularen einen leicht erkennbaren Ursprungspunkt im Formular zu
% benutzen. Der Ursprungspunkt wird als Schnittpunkt von oberem und
% linkem Rand eingestellt. Die Bildgroesse kann (0,0) sein.
% Alle Felder des Formulars werden als Bildelemente (vom Typ Text) plaziert 
% (Siehe Helmut Kopka, Latex - Eine Einfuehrung, Bd 1, Kap. 6, Bilder
% Alle Felder des Forumlars werden im Bezug auf die Ursprungskoordinate
% des Bildes plaziert.
% Der KZV- bzw. KV-Stempel wird mit einem Offset eingestellt, hier:  
% \newcount\stempeloffsetx \stempeloffsetx=20
% \newcount\stempeloffsety \stempeloffsety=-10
% Dadurck kann der 'Stempel' durch einfaches Kopieren auch in andere
% Kassenformulare uebernommen werden (AU, HKP usw.). Es muss dann lediglich
% der Offset geaendert werden.
%
% Das Formular wurde auf einem EPSON 630 LQ-Nadeldrucker unter WindowsXP 
% mit TeXnicCenter (auf der Miktex-Cd, sehr zu empfehlen) entwickelt.
% wenn sich auf einem anderen Drucker oder unter Linux zeigt, dass die 
% Ursprungskoordinate nicht stimmt, so kann diese ueber   
% \oddsidemargin und \topmargin angepasst werden.
% Das Einsetzen der realen Daten erfolgt z.B. ueber ein Pythonskript
% welches die *Schluesselwoerter* sucht und gegen die jeweiligen Daten 
austauscht.

% EMACS-coding: iso-latin-9-with-esc
\documentclass[10pt,a5paper]{letter}
% a6paper gibt es nicht
\pagestyle{empty}
\oddsidemargin61mm
\topmargin27mm
\headheight0mm
\headsep0mm
\topskip0mm
\textwidth146mm
\textheight104mm
\footskip0mm
\paperwidth148mm
\paperheight105mm

\newcount\rechterrand 
\newcount\stempeloffsetx
\newcount\stempeloffsety

\begin{document}
\setlength{\unitlength}{1mm}
\begin{picture}(0,0)%(80,27) % x-Koordinate tut nichts zur Sache
% y-Koordinate schiebt d. 'Bild' nach unten

%\put(0,0){.+} %Ursprungskoordinate (Unterkante KVK-DatenBlock 
\rechterrand=-77 %beliebig dicht am re Papierrand! 
\stempeloffsetx=17
\stempeloffsety=-10
% KVK-Daten und ZA-Stempel einfuegen
\input{kvkdaten.tex}
\input{kzvstempel.tex}
\put(\rechterrand,-10){*rp1*}
\put(\rechterrand,-16){*rp2*}
\put(\rechterrand,-22){*rp3*}
\put(\rechterrand,-28){*rp4*}
\end{picture}
\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-master: rezept.tex
%%% End:

\NeedsTeXFormat{LaTeX2e} \ProvidesClass{praxisbrief}
\RequirePackage{ifthen}
address@hidden     address@hidden
address@hidden
address@hidden
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{dinbrief}}


\ExecuteOptions{german} \ProcessOptions
\LoadClass[a4paper,11pt]{dinbrief}
\addresshigh
\setlength{\textheight}{250mm}
\setlength{\topmargin}{2mm}
\setbottomtexttop{265mm}
%\setbottomtexttop{278mm}
%\setaddressoffset{0mm}

\setaddressheight{40mm}
\newcommand{\lettergerman}{}
\newcommand{\letterenglish}{}
address@hidden
       {\RequirePackage{german}\lettergerman}{\letterenglish}

\pagestyle{headings} 
\usepackage [latin1]{inputenc}
\usepackage {latexsym}



\address{\parbox[t]{9cm}{\huge \textbf{Christoph Becker}\\ \small Zahnarzt}
                  \hfill 
                  \parbox[t]{6cm}{Dauner Str. 21\\
                                  53539 Kelberg\\
                                  Tel.: 02692-930023\\
                                  Fax:  02692-930025\\
                                  \small e-Mail: address@hidden
                                  

                                  \\ \\
                                   \textbf{Termine nach Vereinbarung\\}
                                   \small Kernarbeitszeit: \\
                                   Mo., Mi., Fr. 8 - 12 Uhr\\
                                   Di., Do. 14 - 19 Uhr\\
                                  }}
\backaddress{Christoph Becker $\cdot$ Dauner Str. 21 $\cdot$ 53539 Kelberg}



%\bottomtext{\parbox[t]{16cm}{\rule [0,3ex]{16cm}{1pt} \small 
\bottomtext{\parbox[t]{16cm}{\rule [0,3ex]{16cm}{0,1mm} \small 
                             \textbf{Bankverbindung:}\\
                             Dt. Apotheker u. Ärztebank, Koblenz \hfill
                             Bankleitzahl: 570 606 12 \hfill
                             Konto: 020 2797003} \\
                             \small StNr.: 13/222/0379/8}
\place{Kelberg}
%\signature{Christoph Becker}
\phone{02692}{-930023}

\centeraddress
%\enabledraftstandard
\nowindowrules
\windowtics
\date{\today}
% input-file kvkdaten.tex
% dient zur Darstellung des KVK-Datenblocks auf
% Kassenformularen
 \put(\rechterrand,38){*KVKKrankenkasse*}
\put(\rechterrand,30){*KVKNameVorname*}
\put(-20,25){*KVKGebDatum*}
\put(\rechterrand,25){*KVKStrasse*}
\put(\rechterrand,20){*KVKPLZ-Ort*}
\put(\rechterrand,10){*KVKKassenNr*}
\put(-56,10){*KVKVersichertenNr*}
\put(-22,10){*KVKStatus*}
\put(\rechterrand,2){*KVKZa-KZVNr*}
\put(-49,2){*KVKVKgueltigbis*}
\put(-24,2){*KVKLeseDatum*}
%%%%%Ende KVK-Feldblock %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%Begin KZV-Stempel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% KZV-Stempel setzen
% da dieser in verschiedenen Forumularen an verschiedenen Stellen
% gesetzt wird, wird hier mit einem Offset gearbeitet:
% -> nur der Offset ist anzupassen
\put(\stempeloffsetx,\stempeloffsety){\Large*KZVNr*}
\advance\stempeloffsetx by 22 \advance\stempeloffsety by 3
\put(\stempeloffsetx,\stempeloffsety){\scriptsize KZV}
\advance\stempeloffsety by -3
\put(\stempeloffsetx,\stempeloffsety){\small*Kobl-Tr*}
\advance\stempeloffsetx by -22 \advance\stempeloffsety by -5
\put(\stempeloffsetx,\stempeloffsety){\normalsize*Zahnarzt*}
\advance\stempeloffsety by -5
\put(\stempeloffsetx,\stempeloffsety){\normalsize*Zahnarztname*}
\advance\stempeloffsety by -5
\put(\stempeloffsetx,\stempeloffsety){\normalsize*ZahnarztStrasse*}
\advance\stempeloffsety by -5
\put(\stempeloffsetx,\stempeloffsety){\normalsize*ZahnarztPlZOrt*}
%%%%%%Ende KZV-Stempel %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass{praxisbrief2005}
\usepackage {longtable}
\LTchunksize=100
% EMACS-coding: iso-latin-1
%\pagestyle{headings}
%\pagenumbering {arabic}
%\markright{\leftline{*MitglTitel* *MitglVName* *MitglNamenzus* *MitglNName*
%    \hfill \date
%\hfill Seite \thepage}}}

\begin{document}
\date{*Rechnungsdatum*}
%*MitglAdressAnrede*\\
\begin{letter}{ *MitglAdressAnrede* *MitglTitel* *MitglVName*
                *MitglNamenzus* *MitglNName*\\
                *RechnungStr*\\\textbf{*RechnungPLZOrt*}}
%\sign{*Rechnungsnr*}
\subject{Rechnung über zahnärztliche/zahntechnische Leistungen\\
\textbf{*Rechnungsnr*}}

\opening{*MitglBriefAnrede*,}

Für meine zahnärztlichen Bemühungen erlaube ich mir, gemäß GOZ vom 22.10.1987
und GOÄ vom 1.1.1996, folgende Leistungen in Rechnung zu stellen:

(Material- und Laborkosten werden nach § 3 bzw. § 9 GOZ berechnet)

\textbf{Patient: *PatVName* *PatNName*}, *PatGebDat*
Abrechnungszeitraum: *Behandlungsbeginn* bis *Behandlungsende* \\
\textbf{Rechnungsbetrag: *Rechnungsbetrag* Euro}

\begin{small}

*Privatrechnung*
\end{small}
%\pagebreak[1]
Ich bitte Sie, den fälligen Betrag von \textbf{*Rechnungsbetrag* Euro bis zum
  *Zahlungsziel* } auf mein \\
\textbf{Konto *Bankkonto*, bei der *Bank*, BLZ: *BankLZ*}\\ 
zu überweisen.
%Wenn Sie bar zahlen möchten, bitte ich den Betrag passend abgezählt, zusammen
%mit dieser Rechnung mit zu bringen. 

\closing{Ich danke für Ihr Vertrauen}
\end{letter}
\end{document}



%%% Local Variables:
%%% mode: latex
%%% TeX-master: rechn_pv.tex
%%% End:

\documentclass{praxisbrief2005}
\usepackage {longtable}
\LTchunksize=100
% EMACS-coding: iso-latin-9-with-esc
%\pagestyle{headings}
%\pagenumbering {arabic}
%\markright{\leftline{*MitglTitel* *MitglVName* *MitglNamenzus* *MitglNName*
%    \hfill \date
%\hfill Seite \thepage}}}

\begin{document}
%\date{*Rechnungsdatum*}
\begin{letter}{*MitglAnrede* *MitglTitel* *MitglVName*
                *MitglNamenzus* *MitglNName*\\
                *RechnungStr*\\ *RechnungPLZOrt*}

%\sign{*Rechnungsnr*}
%\subject{Eigenlaborbeleg}
\opening{}

\centerline {\underline {\Large Eigenlaborbeleg}}

Patient: *PatVName* *PatNName*, *PatGebDat* \\

Eingliederungsdatum: *Rechnungsdatum*\\
{*ELabBelNr*}

\begin{small}
*Eigenlaborbeleg*
\end{small}

%\closing{Ich danke für Ihr Vertrauen}

\end{letter}
\end{document}



%%% Local Variables:
%%% mode: latex
%%% TeX-master: rechn_pv.tex
%%% End:


reply via email to

[Prev in Thread] Current Thread [Next in Thread]