jueves, 5 de junio de 2025

Conceptualiza simple, flexible y funcional

 Conceptos Fundamentales del RIM de HL7

El RIM (Reference Information Model) de HL7 v3 se basa en seis clases principales:

  1. Entidades (Entity): Cosas físicas o conceptuales
  2. Roles (Role): Funciones que desempeñan las entidades
  3. Participaciones (Participation): Cómo los roles se involucran en actos
  4. Actos (Act): Acciones documentables
  5. Relaciones entre actos (ActRelationship): Conexiones entre actos
  6. 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 cierta forma un modelo similar con orientación específica en salud fue impulsado por una organización y lo llaman HL7(Health Level 7), con varias versiones actualizadas. Su punto es que nacieron sin considerar la programación orientada a objetos, la homologación de modelos de datos, sin trazabilidad/rastreabilidad, mezclaba mensajes-eventos-campos; requiere ajustes personalizados. Sin duda es un modelo eficiente en su nicho y se alineó sobre RIM, mejoró vocabulario controlado, adoptaron en modelos recientes la POO y UML, incluso con un salto con dominios y clases base. Lo he visto en sectores como aeronáutica y energía también ya con algunas variantes. Algunos esfuerzos aislados de gente que de forma básica solo cubren algunas partes como addra, erpac, aba, asn, etc.

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:

  1. Recolección: El recolector toma el paquete del origen.
  2. Inspección: Un inspector verifica el estado del paquete.
  3. Transporte: Un conductor transporta el paquete.
  4. Entrega: Un repartidor entrega el paquete al cliente.
  5. 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

  1. Enfoque estandarizado: Proporciona un marco común para modelar diversos dominios.
  2. Flexibilidad: Adaptable a diferentes contextos y necesidades.
  3. Trazabilidad: Permite seguir procesos completos de principio a fin.
  4. Interoperabilidad: Facilita la comunicación entre diferentes sistemas.
  5. Representación completa: Captura todos los aspectos relevantes de un proceso.

Recomendaciones para Implementar HL7 en Otros Sectores

  1. Identificar las entidades principales del dominio.
  2. Definir los roles que pueden desempeñar estas entidades.
  3. Determinar los actos relevantes para los procesos del dominio.
  4. Establecer las participaciones que conectan roles y actos.
  5. Definir las relaciones entre actos y entre roles.
  6. Adaptar la terminología al contexto específico del dominio.
  7. Crear perfiles de implementación que especifiquen los elementos necesarios.
  8. 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>

 

Jorge Mercado

#JMCoach

No hay comentarios.:

Publicar un comentario

Nota: sólo los miembros de este blog pueden publicar comentarios.

Tecnología con propósito, trabajos en piloto.

Transformando México con IA, IoT y Apps Inteligentes: 3 Casos de Uso con Impacto Real en fase de prueba piloto. L a tecnología no solo debe...