diff options
-rw-r--r-- | design/database.fig | 85 | ||||
-rw-r--r-- | design/database.tex | 25 | ||||
-rw-r--r-- | design/preamble.tex | 1 | ||||
-rw-r--r-- | design/xmlformat.tex | 159 |
4 files changed, 223 insertions, 47 deletions
diff --git a/design/database.fig b/design/database.fig new file mode 100644 index 0000000..f158ad6 --- /dev/null +++ b/design/database.fig @@ -0,0 +1,85 @@ +#FIG 3.2 Produced by xfig version 3.2.5 +Landscape +Center +Inches +Letter +100.00 +Single +-2 +1200 2 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 3300 5250 3300 5475 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5250 5250 5250 5475 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5100 4875 5100 5025 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 4050 4875 4050 5025 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 4050 3450 4050 3600 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5100 3450 5100 3600 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5250 8925 5250 9150 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5100 8550 5100 8700 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 4050 8550 4050 8700 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 4050 7125 4050 7275 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5100 7125 5100 7275 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 2850 2025 5700 2025 5700 5700 2850 5700 2850 2025 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3300 2400 5250 2400 5250 3825 3300 3825 3300 2400 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 2700 5100 2700 5100 3075 4050 3075 4050 2700 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 3075 5100 3075 5100 3450 4050 3450 4050 3075 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3300 3825 5250 3825 5250 5250 3300 5250 3300 3825 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 4125 5100 4125 5100 4500 4050 4500 4050 4125 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 4500 5100 4500 5100 4875 4050 4875 4050 4500 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 2850 5700 5700 5700 5700 9375 2850 9375 2850 5700 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3300 6075 5250 6075 5250 7500 3300 7500 3300 6075 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 6375 5100 6375 5100 6750 4050 6750 4050 6375 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 6750 5100 6750 5100 7125 4050 7125 4050 6750 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 3300 7500 5250 7500 5250 8925 3300 8925 3300 7500 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 7800 5100 7800 5100 8175 4050 8175 4050 7800 +2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5 + 4050 8175 5100 8175 5100 8550 4050 8550 4050 8175 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 5700 9375 5700 9675 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 2850 9375 2850 9675 +2 1 2 1 0 7 50 -1 -1 3.000 0 0 -1 0 0 2 + 3300 8925 3300 9150 +4 0 0 50 -1 0 12 0.0000 4 150 405 3000 2325 CPR\001 +4 0 0 50 -1 0 12 0.0000 4 150 1035 3450 2625 Transaktion\001 +4 0 0 50 -1 0 12 0.0000 4 150 1035 3450 4050 Transaktion\001 +4 0 0 50 -1 0 12 0.0000 4 150 405 3000 6000 CPR\001 +4 0 0 50 -1 0 12 0.0000 4 150 1035 3450 6300 Transaktion\001 +4 0 0 50 -1 0 12 0.0000 4 150 1035 3450 7725 Transaktion\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 2925 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 3300 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 4350 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 4725 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 6600 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 6975 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 8025 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 420 4125 8400 Field\001 +4 0 0 50 -1 0 12 0.0000 4 150 660 6000 2325 Table1:\001 +4 0 0 50 -1 0 12 0.0000 4 150 660 6000 3090 Table2:\001 +4 0 0 50 -1 0 12 0.0000 4 195 3015 6000 3345 (TransactionID, Fieldname, Value)\001 +4 0 0 50 -1 0 12 0.0000 4 150 660 6000 3855 Table3:\001 +4 0 0 50 -1 0 12 0.0000 4 195 4980 6000 2580 (CPR, TransaktionID, Makro, Version, Timestamp, User)\001 +4 0 0 50 -1 0 12 0.0000 4 195 1935 6000 4110 (Fieldname, Type, ... )\001 diff --git a/design/database.tex b/design/database.tex new file mode 100644 index 0000000..0375202 --- /dev/null +++ b/design/database.tex @@ -0,0 +1,25 @@ +\section{Database layout} +\begin{figure} +\begin{center} +\includegraphics[width=120mm]{database.eps}\\ +\end{center} +\label{database} +\caption{Databasens indhold og et foreslået tabel design.} +\end{figure} +\begin{verbatim} +Database designformål: +- Hurtig skrivning af en transaktion. +- Hurtig genfinding af en tidligere skrevet transaktion. +- Robusthed overfor ændringer i makroers layout. +- Gode muligheder for at lave statistik udtræk. + +Estimat af datastørrelser: +200 patienter pr. dag. +10 fields pr. patient. +---- +2000 fields + 200 headere = 2200 entries i databasen pr. dag. + +Hvis en entry i gennemsnit består af 200 tegn er det +2200 * 200 = 440000 bytes/dag. +eller 153.16Mbytes/år +\end{verbatim} diff --git a/design/preamble.tex b/design/preamble.tex index b916ab7..0ac00c4 100644 --- a/design/preamble.tex +++ b/design/preamble.tex @@ -134,6 +134,7 @@ \include{xmlformat} \include{transmission} \include{client} +\include{database} \end{document} %********************************************* diff --git a/design/xmlformat.tex b/design/xmlformat.tex index 781bb24..17a80d2 100644 --- a/design/xmlformat.tex +++ b/design/xmlformat.tex @@ -1,33 +1,80 @@ \section{XML Formatet} +Al kommunikation mellem serveren og klienten (og vice versa) +foregår ved hjælp af XML.\\ +Dokumenterne skal starte med en header som specificerer hvilken +XML verison som benyttes, efterfulgt af rodknuden som skal være af +typen \texttt{pracro}.\\ +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<pracro version="1.0" cpr="1505050505"> + . + . + . +</pracro> +\end{verbatim} +Det er vigtigt at pointere at alt data i xml dokumentet skal være i +UTF-8 formatering. + +\subsection{\texttt{pracro} elementet} +Pracro elementet bruges som indpakning til hele dokumentet. Den +identificerer blandt andet dokumentversionen og kan indeholde alle +typer data forbundet med Pracro systemet.\\ +Pracro elementet har flg. attributter: +\begin{itemize} +\item \textit{cpr} - CPR nummeret på den patient som dataene i filen + er knyttet til. Det bruges blandt andet ved genfinding af data og + den afsluttende lagring af data.\\ + Dette felt må ikke undlades. +\item \textit{version} - Dette felt fortæller hvilken dokument + version der er benyttet.\\ + Denne variabel skal matche den version klienten forventer.\\ + Dette felt må ikke udelades. +\end{itemize} + +\subsection{Request} +En request sektion sendt til serveren skal bevirke at serveren inlæser og +sender den angivne makro til klienten.\\ +Hvis klienten modtager en request sektion skal den blot ignorere den. +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<pracro version="1.0" cpr="1505050505"> + <request makro="visus"/> +</pracro> +\end{verbatim} + +\subsection{Makro} +En makro definerer en makro som grafisk viser og eller indsamler data.\\ +En makro sektion sendt til klienten skal bevirke at den beskrevne +grafisk makro vises på skærmen.\\ +Hvis serveren modtager en makro sektion skal den blot ignorere den. Vi starter med et eksempel: \begin{verbatim} <?xml version="1.0" encoding="UTF-8"?> -<macro name="test_macro" cpr="1505050505" version="1.0" macro_version="1.0"> - <window name="mainwindow" - caption="This is the mainwindow" - width="800" - height="600" - layout="vbox"> - <include name="patient"/> - <frame name="data_frame" layout="hbox"> - <label caption="Some field"/> - <lineedit name="lineedit1" regexp="[0-9]+"/> - </frame> - <frame name="bottom_frame" layout="hbox"> - <spacer /> - <button caption="Close window" action="abort"/> - <button caption="Commit changes" action="commit"/> - </frame> - </window> -</macro> +<pracro version="1.0" cpr="1505050505"> + <macro name="macro" version="1.0"> + <window name="mainwindow" + caption="This is the mainwindow" + width="800" + height="600" + layout="vbox"> + <include name="patient"/> + <frame name="data_frame" layout="hbox"> + <label caption="Some field"/> + <lineedit name="lineedit1" regexp="[0-9]+"/> + </frame> + <frame name="bottom_frame" layout="hbox"> + <spacer /> + <button caption="Close window" action="abort"/> + <button caption="Commit changes" action="commit"/> + </frame> + </window> + </macro> +</pracro> \end{verbatim} Eksemplet illustrerer flg. funktionaliteter: Makroen og den properties, main vinduet, includes, frames, labels, lineedits og knapper.\\ \\ -Det er vigtigt at pointere at alt data i xml dokumentet skal være i -UTF-8 formatering.\\ -\\ Includes foregår serverside, dvs. klienten modtager det sammensatte dokument og vil dermed aldrig se \verb|<include ...>| tagget.\\ \\ @@ -37,8 +84,8 @@ f.eks. LineEdit, Combo eller CheckBox. Ikke-input felter er felter som udelukkende bidrager til layout og brugerens forståelse af inputfelterne, f.eks. Frame, Image eler Label. -\subsection{\texttt{macro} elementet} -Makro elementet brges som indpakning til hele makroen. Den +\subsubsection{\texttt{macro} elementet} +Makro elementet bruges som indpakning til hele makroen. Den identificerer makroen og angiver en række værdier som skal bruges til opsætning på klienten.\\ Makroen har flg. attributter: @@ -49,21 +96,12 @@ Makroen har flg. attributter: underscore, dvs. \verb|[a-z0-9_]+|, hvis det skrives ud som regulært udtryk.\\ Dette felt må ikke undlades. -\item \textit{cpr} - CPR nummeret på den patient som makroen er - knyttet til. Dette CPR nummer skal matche det CPR nummer som - klienten har bedt om.\\ - Bruges blandt andet ved den afsluttende lagring af data.\\ - Dette felt må ikke undlades. -\item \textit{version} - Dette felt fortæller hvilken version af XML - specifikationen som er benyttet i dokumentet.\\ - Denne variabel skal matche den version klienten forventer.\\ - Dette felt må ikke udelades. -\item \textit{macro\_version} - Dette felt fortæller hvilken version +\item \textit{version} - Dette felt fortæller hvilken version den konkrete makro har.\\ Dette felt må ikke udelades. \end{itemize} -\subsection{\texttt{include} elementet} +\subsubsection{\texttt{include} elementet} Include elementet kan kun frekomme serverside, hvor det vil blive udvidet med den angivne makro.\\ Serveren indsætter alle elementer fra (og ikke med) makroens rodvindue @@ -76,7 +114,7 @@ Include har flg. attributter: benyttes værdien ``false''. \end{itemize} -\subsection{Generelle GUI attributter} +\subsubsection{Generelle GUI attributter} Alle GUI elementerne i xml dokumentet har flg. attributter: \begin{itemize} \item \textit{name} - Navnet på elementet. Bruges ved data @@ -98,7 +136,7 @@ Alle GUI elementerne i xml dokumentet har flg. attributter: samt alle dets children rekursivt. Hvis undladt benyttes værdien ``false''. \end{itemize} -\subsection{\texttt{window} elementet} +\subsubsection{\texttt{window} elementet} Et vindue benyttes som moder element, til at indsætte andre elementer i. Det vil optræde som et vindue på skærmen med kanter, vinduestitel, ikon osv.\\ @@ -113,7 +151,7 @@ Et vindue har flg. attributter: ``hbox'' eller ``vbox''. Hvis udeladt benyttes et vbox layout. \end{itemize} -\subsection{\texttt{frame} elementet} +\subsubsection{\texttt{frame} elementet} En frame benyttes til at indsætte nestede elementer i makroen, såsom gruperinger af radio buttons.\\ En frame har flg. attributter: @@ -130,11 +168,11 @@ En frame har flg. attributter: ``hbox'' eller ``vbox''. Hvis udeladt benyttes et vbox layout. \end{itemize} -\subsection{\texttt{spacer} elementet} +\subsubsection{\texttt{spacer} elementet} Et spacer element bruges for at pakke andre elementer i et layout.\\ En spacer har ingen attributter. -\subsection{\texttt{label} elementet} +\subsubsection{\texttt{label} elementet} En label benyttes til at indsætte beskrivejnde tekst i makroen.\\ En label har flg. attributter: \begin{itemize} @@ -144,7 +182,7 @@ En label har flg. attributter: ``left'', ``right'' eller ``center''. Hvis udeladt benyttes ``left''. \end{itemize} -\subsection{\texttt{lineedit} elementet} +\subsubsection{\texttt{lineedit} elementet} En lineedit benyttes til at læse input fra brugeren i kraft tekst.\\ Lineediten kan have et regulært udtryk tilknyttet, som validerer input mens der tastes og ændrer feltets baggrundsfarve afhængig af om feltet @@ -160,7 +198,7 @@ En lineedit har flg. attributter: \verb|http://doc.trolltech.com/4.3/qregexp.html#introduction| \end{itemize} -\subsection{\texttt{textedit} elementet} +\subsubsection{\texttt{textedit} elementet} En textedit benyttes ligesom lineedit til at læse input fra brugeren i kraft af tekst.\\ Textediten kan have et regulært udtryk tilknyttet, som validerer input @@ -177,7 +215,7 @@ En textedit har flg. attributter: \verb|http://doc.trolltech.com/4.3/qregexp.html#introduction| \end{itemize} -\subsection{\texttt{button} elementet} +\subsubsection{\texttt{button} elementet} En knap kan benyttes til enten at afbryde makroen eller at acceptere dens indhold og dermed gemme dataene på serveren.\\ En knap har flg. attributter: @@ -191,7 +229,7 @@ En knap har flg. attributter: vil en inaktiv knap blive produceret. \end{itemize} -\subsection{\texttt{checkbox} elementet} +\subsubsection{\texttt{checkbox} elementet} En checkbox bruges til at aktivere eller deaktivere en given værdi ved hjælp af flueben.\\ En checkbox har flg. attributter: @@ -203,7 +241,7 @@ En checkbox har flg. attributter: ``false''. \end{itemize} -\subsection{\texttt{togglebutton} elementet} +\subsubsection{\texttt{togglebutton} elementet} En togglebutton bruges til at aktivere eller deaktivere en given værdi ved brug af en trykknap.\\ En togglebutton har flg. attributter: @@ -215,7 +253,7 @@ En togglebutton har flg. attributter: ``false''. \end{itemize} -\subsection{\texttt{radiobutton} elementet} +\subsubsection{\texttt{radiobutton} elementet} En radiobutton bruges til at vælge et element ud af en gruppe.\\ En radiobutton har flg. attributter: \begin{itemize} @@ -232,8 +270,35 @@ En radiobutton har flg. attributter: window).\\ \end{itemize} -\subsection{\texttt{combobox} elementet} +\subsubsection{\texttt{combobox} elementet} Kommer snart... -\subsection{\texttt{listbox} elementet} +\subsubsection{\texttt{listbox} elementet} Kommer snart... + +\subsection{Commit} +En commit sektion sendt til serveren skal bevirke at serveren lagrer de +sendte data i databasen, samt genererer et resumé som kan blive sendt +tilbage til klienten.\\ +Hvis klienten modtager en commit sektion skal den blot ignorere den. +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<pracro version="1.0" cpr="1505050505"> + <commit macro="visus" version="1.0"> + <field name="visus_objektiv" value="42"/> + <field name="visus_subjektiv" value="42"/> + </commit> +</pracro> +\end{verbatim} + +\subsection{Resumé} +En resumé sektion sendt til klienten skal bevirke at klienten appender den +sendte tekst til PC-Praxis journalfilen.\\ +Hvis serveren modtager en resumé sektion skal den blot ignorere den. +\begin{verbatim} +<?xml version="1.0" encoding="UTF-8"?> +<pracro version="1.0" cpr="1505050505"> + <resume macro="visus" version="1.0">Det objektive synsmål var +42 dioptri, og det subjektive synsmål var 42 dioptri.</resume> +</pracro> +\end{verbatim} |