/*
Como Precondición tenemos un array de datos a enviar para construir el mensaje HL7
y tenemos que los caracteres separadores serán: <cr>, | ^ ~ & \
*/
procedure generar_mensaje (datos) {
Identificar_tipo_mensaje();
Identificar_separadores();
validar (datos);
ordenar_segmentos (datos, lista_segmentos);
foreach segmento in (lista_segmentos) {
insertar segmento.nombre; /* por ejemplo, el primer segmento será MSH */
/ * Obtener campos del segmento iterando */
foreach campo in (campos_de(segmento)) {
insertar separador_campo; /* En nuestro casos seria el pipe '|' */
/* Iterar repeticiones para campos que admiten repetición, o la única ocurrencia en caso contrario*/
foreach ocurrencia in (ocurrencias_de(campo)) {
/* Iterar componentes de la ocurrencia/repeticion */
foreach componente in (componentes_de(ocurrencia)) {
obtener_datos_subcomponente(componente);
/* Iterar y obtener los datos de los subcomponentes */
foreach subcomponente in (subcomponentes_de(componente)) {
/* escapar los delimitadores de ER7 definidos */
reemplazar(separador_campo,'\F\ ');
reemplazar(separador_componente, '\S\ ');
reemplazar(separador_repetición, '\R\ ');
reemplazar(caracter_de_escapado, '\E\ ');
reemplazar(separador_subcomponente, '\T\ ');
reemplazar(caracter_truncado, '\P\ ');
insertar subcomponente;
if not ultimo(subcomponente)
insertar separador_subcomponente; /* el caracter & */
}
if not ultimo(componente)
insert separador_componente; /* caracter ^ */
}
if not ultimo(ocurrencia)
insertar separador_repeticion; /* En este caso sería '~' */
}
salir si ultimo(campo);
}
insertar terminador_segmento; /* será un <cr> */
}
return;
}