Conceptos Fundamentales del RIM de HL7
El RIM
(Reference Information Model) de HL7 v3 se basa en seis clases principales:
- Entidades (Entity): Cosas físicas o
conceptuales
- Roles (Role): Funciones que desempeñan
las entidades
- Participaciones
(Participation):
Cómo los roles se involucran en actos
- Actos (Act): Acciones documentables
- Relaciones entre actos
(ActRelationship): Conexiones entre actos
- Relaciones entre roles
(RoleLink):
Conexiones entre roles
ADM (Act Driven Model) surge como el facilitador y orquestador para que el negocio explote los beneficios de los procesos, productos, tecnología, etc; para lograr los objetivos estratégicos, alinear las áreas y lograr la preferencia de los clientes. El secreto pasar a la acción sin ahogarse en la documentación, tampoco construir sin sentido y sin lo mínimo necesario. Es importante saber, dónde estamos, hacia dónde vamos y sobretodo cómo lo haremos. Conocer el negocio, tanto en su pulso que es identificar lo que sucede con números; así como, identificar de forma simple, fácil y flexible el cómo agregar o ajustar los modelos/procesos actuales para seguir adelante ante la competencia y oportunidades empresariales.
En HL7 se asimilan los objetos al representar Roles de aplicación, Eventos de Activación y Escenarios con casos de uso, que recaen sobre modelos de datos y la interacción que encola el proceso. Toda la estructura de los mensajes HL7 se construye a partir de clases y asociaciones basadas en RIM. Las entidades quedan en bases de datos relacionales principalmente.
RIM que también es una parte menor del Acts Driven Model, considera 6 clases fundamentales: Actuación/Actos, Entidad, Rol, Participante, Actuación relacionada, Rol relacionado. De estas clases se pueden crearse especializaciones de la clase. Con UML se representa de igual forma la cardinalidad y asociaciones, independiente de los atributos y métodos. Dejando al final un modelo de mensajes de información o eventos.
Ejemplo Real: Adaptación al Sector Logístico
Vamos a
crear un ejemplo de adaptación de HL7 a un sistema de logística y transporte:
Entidades
- Organización: Empresa de transporte
- Lugar: Almacén, centro de
distribución
- Material: Paquetes, productos
- Dispositivo: Vehículos, maquinaria
Roles
- Transportista: Entidad (persona) que
realiza el transporte
- Cliente: Entidad que solicita un
servicio
- Mercancía: Entidad (material) que es
transportada
Participaciones
- Ejecutor: Transportista que realiza
un envío
- Objetivo: Mercancía que se
transporta
- Destinatario: Cliente que recibe el
envío
- Ubicación: Lugar donde se realiza o
termina el acto
Actos
- Observación: Registro de la condición
de un paquete
- Procedimiento: Proceso de carga/descarga
- Suministro: Entrega de la mercancía
- Transporte: Movimiento de la mercancía
de un punto a otro
Veamos ahora cómo representar esto en un diagrama y con un flujo de ejemplo.
Ejemplo CU
Explicación del Caso de Uso Logístico
Veamos
cómo he adaptado el modelo HL7 para un sistema de logística usando los
diagramas y el ejemplo:
1. Clases Principales en el Diagrama RIM
En el
primer diagrama podemos ver las seis clases principales del RIM adaptadas al
contexto logístico:
- Entidades: Representan objetos
físicos como empresas, almacenes y paquetes.
- Roles: Describen las funciones
que desempeñan las entidades (transportista, cliente, mercancía).
- Actos: Representan acciones como
la recolección, inspección, transporte y entrega.
- Participaciones: Vinculan roles con actos
(ejecutor, objetivo, destinatario).
- Relaciones entre actos: Conectan actos
relacionados (ej. carga como componente del transporte).
- Relaciones entre roles: Definen jerarquías o
conexiones entre roles (ej. jefe-conductor).
2. Flujo de Proceso en el Segundo Diagrama
El
segundo diagrama muestra un flujo completo de entrega de un paquete:
- Recolección: El recolector toma el
paquete del origen.
- Inspección: Un inspector verifica el
estado del paquete.
- Transporte: Un conductor transporta el
paquete.
- Entrega: Un repartidor entrega el
paquete al cliente.
- Confirmación: El cliente confirma la
recepción.
Cada acto
tiene participaciones asociadas que vinculan los roles correspondientes.
3. Estructura XML en el Ejemplo de Código
El
documento XML que he creado muestra cómo funcionaría un mensaje HL7 adaptado
para logística:
- El elemento principal <DeliveryEvent>
representa un evento de entrega completo.
- <transportAct> es el
acto principal (transporte/envío) con sus atributos como fechas, estado y
prioridad.
- Las participaciones se
representan como elementos dentro del acto:
- <performer> para el
transportista que ejecuta el envío
- <transportMeans> para
el vehículo utilizado
- <recipient> para el
cliente que recibe el envío
- <destination> para el
lugar de entrega
- <subject> para la
mercancía transportada
Cada
participación vincula un rol específico, que a su vez está vinculado a una
entidad. Por ejemplo, el transportista (rol) es una persona específica
(entidad) que trabaja para una organización específica (otra entidad).
Conceptos Clave de HL7 RIM en Detalle
Entidades (Entity)
En HL7,
las entidades son cosas concretas o abstractas que tienen existencia
independiente. En nuestro ejemplo logístico:
- Personas: Transportistas,
inspectores, clientes
- Organizaciones: Empresas de transporte,
clientes corporativos
- Lugares: Almacenes, centros de distribución
- Materiales: Paquetes, productos
- Dispositivos: Vehículos, escáneres
Atributos
clave: ID,
código de tipo, nombre, descripción.
Roles (Role)
Los roles
definen la función que desempeña una entidad en un contexto específico:
- Transportista: Rol que desempeña una
persona para transportar paquetes
- Cliente: Rol de quien
recibe/solicita un servicio
- Mercancía: Rol de un material que es
objeto de transporte
Atributos
clave: ID,
código de tipo, periodo de vigencia, estatus.
Actos (Act)
Los actos
son acciones intencionadas y documentables:
- Observación: Registra características o
estados (ej. inspección de un paquete)
- Procedimiento: Acciones con objetivos
específicos (ej. carga/descarga)
- Transporte: Movimiento de algo de un
lugar a otro
- Suministro: Entrega de un producto o
material
Atributos
clave: ID,
código de tipo, tiempo efectivo, estatus, prioridad, razón.
Participaciones (Participation)
Las
participaciones conectan los roles con los actos, definiendo cómo un rol
participa en un acto:
- Ejecutor (PRF): Quien realiza la acción
- Sujeto/Objetivo (SBJ): Lo que es afectado por la
acción
- Destino (DST): Dónde termina la acción
- Receptor (RCV): Quien recibe el resultado
de la acción
Atributos
clave: Tipo de
participación, tiempo de participación.
Relaciones entre Actos (ActRelationship)
Definen
conexiones entre actos:
- Componente (COMP): Un acto forma parte de
otro (ej. inspección como parte del proceso de entrega)
- Secuencia (SEQL): Un acto sigue a otro (ej.
carga seguida de transporte)
- Cumplimiento (FLFS): Un acto satisface los
requisitos de otro
Atributos
clave: Tipo de
relación, tiempo de relación.
Relaciones entre Roles (RoleLink)
Definen
conexiones entre roles:
- Jerarquía: Relación
superior-subordinado (ej. jefe-conductor)
- Reemplazo: Un rol reemplaza a otro
temporalmente
Atributos
clave: Tipo de
vínculo, periodo de validez.
Adaptando HL7 a Otros Sectores
El modelo
HL7 RIM puede adaptarse a muchos otros sectores además de la logística. Algunos
ejemplos:
1. Educación
- Entidades: Estudiantes, profesores,
instituciones, materiales educativos
- Roles: Alumno, docente, tutor,
administrador
- Actos: Matrícula, evaluación,
clase, tutoría
- Participaciones: Evaluador, evaluado,
instructor
2. Cadena de Suministro
- Entidades: Productos, fábricas,
almacenes
- Roles: Proveedor, fabricante,
distribuidor
- Actos: Pedido, producción, envío,
recepción
- Participaciones: Emisor, receptor,
productor
3. Gestión de Proyectos
- Entidades: Personas, equipos,
recursos
- Roles: Gerente, desarrollador,
tester
- Actos: Tarea, reunión, entrega
- Participaciones: Responsable, colaborador
Ventajas de Usar el Modelo HL7 RIM
- Enfoque estandarizado: Proporciona un marco común
para modelar diversos dominios.
- Flexibilidad: Adaptable a diferentes
contextos y necesidades.
- Trazabilidad: Permite seguir procesos
completos de principio a fin.
- Interoperabilidad: Facilita la comunicación
entre diferentes sistemas.
- Representación completa: Captura todos los aspectos
relevantes de un proceso.
Recomendaciones para Implementar HL7 en Otros
Sectores
- Identificar las entidades
principales del
dominio.
- Definir los roles que pueden desempeñar estas
entidades.
- Determinar los actos relevantes para los
procesos del dominio.
- Establecer las
participaciones que
conectan roles y actos.
- Definir las relaciones entre actos y entre roles.
- Adaptar la terminología al contexto específico del
dominio.
- Crear perfiles de
implementación que
especifiquen los elementos necesarios.
- Desarrollar guías de
implementación
para los sistemas que usarán el modelo.
Anexo código muestra
<DeliveryEvent xmlns="urn:hl7-org:v3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!--
Identificador único del mensaje -->
<id
root="2.16.840.1.113883.4.500" extension="MSG-12345"/>
<creationTime
value="20250520121530"/>
<versionCode
code="3.0"/>
<!--
ACTO: Transporte/Envío -->
<transportAct classCode="TRNS" moodCode="EVN">
<id root="2.16.840.1.113883.4.500.1" extension="SHIP-67890"/>
<code code="DLVR" displayName="Delivery"/>
<statusCode code="completed"/>
<effectiveTime>
<low value="20250520080000"/>
<high value="20250520143000"/>
</effectiveTime>
<priorityCode code="R" displayName="Routine"/>
<!--
PARTICIPACIÓN: Transportista que ejecuta el envío -->
<performer typeCode="PRF">
<time>
<low value="20250520080000"/>
<high value="20250520143000"/>
</time>
<!-- ROL: Transportista -->
<assignedDriver classCode="ASSIGNED">
<id root="2.16.840.1.113883.4.500.2" extension="DRIVER-456"/>
<!--
ENTIDAD: Persona física -->
<assignedPerson
classCode="PSN" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.4.500.3" extension="EMP-789"/>
<name>
<given>Juan</given>
<family>Pérez</family>
</name>
</assignedPerson>
<!-- ENTIDAD: Organización -->
<representedOrganization classCode="ORG" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.4.500.4" extension="ORG-123"/>
<name>Transportes Rápidos
S.A.</name>
</representedOrganization>
</assignedDriver>
</performer>
<!--
PARTICIPACIÓN: Vehículo utilizado -->
<transportMeans
typeCode="TRANS">
<!--
ENTIDAD: Dispositivo (vehículo) -->
<vehicle
classCode="DEV" determinerCode="INSTANCE">
<id
root="2.16.840.1.113883.4.500.5" extension="VEH-555"/>
<code
code="TRUCK" displayName="Camión de Reparto"/>
<manufacturerModelName>Modelo XYZ-2023</manufacturerModelName>
</vehicle>
</transportMeans>
<!--
PARTICIPACIÓN: Cliente que recibe el envío -->
<recipient typeCode="RCV">
<!-- ROL: Cliente -->
<customer classCode="ASSIGNED">
<id root="2.16.840.1.113883.4.500.6" extension="CUST-101112"/>
<!--
ENTIDAD: Persona u organización -->
<assignedEntity classCode="ORG" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.4.500.7" extension="ENTITY-13579"/>
<name>Comercio Electrónico S.L.</name>
<telecom value="tel:+34912345678"/>
<addr>
<streetAddressLine>Calle Principal 123</streetAddressLine>
<city>Madrid</city>
<postalCode>28001</postalCode>
<country>España</country>
</addr>
</assignedEntity>
</customer>
</recipient>
<!--
PARTICIPACIÓN: Lugar de destino -->
<destination
typeCode="DST">
<!--
ENTIDAD: Lugar físico -->
<location classCode="PLC" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.4.500.8" extension="LOC-246810"/>
<name>Almacén Principal</name>
<addr>
<streetAddressLine>Polígono Industrial Norte, Nave 7</streetAddressLine>
<city>Madrid</city>
<postalCode>28050</postalCode>
<country>España</country>
</addr>
<geoCoordinates>
<latitude value="40.4637"/>
<longitude value="-3.5837"/>
</geoCoordinates>
</location>
</destination>
<!--
RELACIÓN DE ACTOS: Componentes del transporte -->
<component
typeCode="COMP">
<!--
ACTO: Observación sobre el estado del envío -->
<observationEvent classCode="OBS" moodCode="EVN">
<id root="2.16.840.1.113883.4.500.9" extension="OBS-13579"/>
<code code="INSP" displayName="Inspección"/>
<statusCode code="completed"/>
<effectiveTime value="20250520080000"/>
<value xsi:type="CD" code="OK" displayName="En buen estado"/>
</observationEvent>
</component>
<!--
PARTICIPACIÓN: Carga transportada -->
<subject typeCode="SBJ">
<!-- ROL: Mercancía -->
<package classCode="ASSIGNED">
<id root="2.16.840.1.113883.4.500.10" extension="PKG-24680"/>
<!-- ENTIDAD: Material físico -->
<assignedProduct classCode="MMAT" determinerCode="INSTANCE">
<id root="2.16.840.1.113883.4.500.11" extension="PROD-13579"/>
<code code="ELEC" displayName="Electrónica"/>
<name>Computadora Portátil</name>
<desc>Computadora portátil modelo XYZ, color plateado</desc>
<quantity value="5" unit="unidades"/>
<physicalQuantity>
<value value="3.5" unit="kg"/>
</physicalQuantity>
<lotNumberText>LOT-202405-123</lotNumberText>
</assignedProduct>
</package>
</subject>
</transportAct>
</DeliveryEvent>
No hay comentarios.:
Publicar un comentario
Nota: sólo los miembros de este blog pueden publicar comentarios.