Quiero crear una representación (gráfica) para una costumbreHL7v2estructura del mensaje. En este escenario, sólo me preocupa la estructura del mensaje de alto nivel: la disposición y el uso de los segmentos de un mensaje. Los documentos oficiales (que no están disponibles a menos que pague por ellos, AFAIK) usan una notación de tabla como esta:
En esta estructura, los diferentes corchetes denotan segmentos opcionales []
y repetibles {}
, así como alternativas <x|y|z>
. Nuestra estructura personalizada se basa en este estándar y básicamente agrega algunos segmentos y declara que nunca usaremos otros segmentos específicos. Hasta ahora, simplemente hemos imitado la estructura similar a una tabla, pero encuentro que es difícil de leer, especialmente con múltiples niveles anidados de grupos condicionales. Estaba pensando en convertir elEjemplo de árbol de archivos TikZpara representar la estructura de datos, pero con todas las child [missing]
entradas y otras peculiaridades, me preguntaba si hay otras opciones (¿mejores?).
Respuesta1
Estoy totalmente de acuerdo en que el formato actual que está utilizando es incómodo y posiblemente arroje luz sobre las muchas razones por las que fracasan los proyectos de software de salud; que en mi humilde opinión se debe a la complejidad burocrática. Tener que pagar por los formatos añade sal a la herida.
Recomendaría usar Lua. Si genera los datos para la composición tipográfica mediante programación, usaría tablas Lua directamente. Si se generan desde una base de datos, expórtelos como XML o preferiblemente como json. Aquí hay un programa simplificado para demostrar esto. No se necesitan ferrocarriles ni cajas, puede leer los datos como un párrafo de un libro.
\documentclass{article}
\usepackage{fontspec,luacode, xcolor}
\newfontfamily{\arial}{Arial}
\begin{document}
\arial
\begin{luacode}
if type(tex)=='table' then local print = tex.print end
local patientVisit = {
patientClass = "CON",
assignedPatientLocation = {
pointOfCare = "8152879"
},
visitNumber = {
idNumber = 16164813
}
}
function inspect_table (tab, offset)
offset = offset or "\\mbox{~~}"
for k, v in pairs (tab) do
local newoffset = offset .. offset
if type(v) == "table" then
print(offset..k .. " = \\{\\par ")
inspect_table(v, newoffset)
print(offset.."\\}\\par")
else
if k=="patientClass" then print(offset .. '{\\color{red}'.. k .. "} = " .. tostring(v), "\\par")
else
print(offset..k.."="..v.."\\par")
end
end
end
end
inspect_table(patientVisit)
\end{luacode}
La rutina anterior es muy simple, sin embargo, se puede modificar fácilmente para codificar mejor los colores, ordenar los campos y agregar notas, etc. Como beneficio adicional, no se necesitan códigos cat. Si está interesado en una solución json, envíe un mensaje y publicaré una.
Respuesta2
Un ejemplo: encuéntrelo en http://ddi.uni-wuppertal.de/material/materialsammlung/
El paquete está en CTAN:http://ctan.org/pkg/schule
\documentclass{schulein}
\usepackage[utf8]{inputenc}
\usepackage{schulinf}
\begin{document}
\begin{tikzpicture}[syntaxdiagramm]
\node [] {};
\node [terminal] {public};
\node [terminal] {class};
\node [nonterminal] {Klassenname};
\node [terminal] {\{};
\node (endstart) [point] {};
\node [point, below=of endstart] {};
\node [point, xshift=-75mm] {};
\node (endAttribute) [endpoint, continue chain=going below] {};
\node (startAttribute) [point] {};
{[start chain=attribute going right]
\chainin (startAttribute);
\node [point, xshift=25mm] {};
\node [point, continue chain=going above] {};
\node [nonterminal, continue chain=going left] {Attribut};
\node [point, join,join=with endAttribute] {};
}
\node (startKonstruktor) [point] {};
\node (endKonstruktor) [endpoint] {};
{[start chain=konstruktor going right]
\chainin (startKonstruktor);
\node [point, xshift=30mm] {};
\node [point, continue chain=going below] {};
\node [nonterminal, continue chain=going left] {Konstruktor};
\node [point, join,join=with endKonstruktor] {};
}
\node (endMethode) [endpoint] {};
\node (startMethode) [point] {};
{[start chain=methode going right]
\chainin (startMethode);
\node [point, xshift=25mm] {};
\node [point, continue chain=going above] {};
\node [nonterminal, continue chain=going left] {Methode};
\node [point, join,join=with endMethode] {};
}
\node [point] {};
\node [terminal, continue chain=going left] {\}};
\end{tikzpicture}
\end{document}