Modelo Entidad Relación (MER) del Módulo IRIS (Intelligent Retinal Imaging System)

🧾 Reporte del Modelo Entidad-Relación (MER) – IRIS

📌 Objetivo del Modelo

El modelo entidad-relación describe la estructura de datos para el sistema IRIS, diseñado para:

  • Almacenar y gestionar imágenes diagnósticas de pacientes.
  • Ejecutar análisis automatizado mediante IA.
  • Permitir la validación médica por profesionales de la salud visual.
  • Asegurar trazabilidad completa mediante campos de auditoría.

📘 Descripción de Entidades y Campos

1. 🧍‍♂️ user

Representa a los usuarios del sistema, incluyendo operadores, administradores y creadores de registros clínicos.

CampoTipoDescripción
userstring(13) PKIdentificador único del usuario.
usernamestringNombre de usuario.
rolestringRol del usuario (ej. operador, admin).
emailstringCorreo electrónico del usuario.
passwordstringContraseña encriptada.
statusstringEstado del usuario (activo/inactivo).
authorstring(13) FKUsuario que creó este registro.
created_atdatetimeFecha de creación del registro.
updated_atdatetimeÚltima fecha de actualización.
deleted_atdatetimeFecha de eliminación lógica (si aplica).

2. 👁️ patient

Contiene los datos básicos de cada paciente registrado en el sistema.

CampoTipoDescripción
patientstring(13) PKIdentificador único del paciente.
first_namestringNombres del paciente.
last_namestringApellidos del paciente.
document_typestringTipo de documento de identidad.
document_numberstringNúmero del documento.
birth_datedateFecha de nacimiento.
genderstringGénero del paciente.
contact_infostringTeléfono, correo o dirección.
registration_datedateFecha de registro en la plataforma.
authorstring(13) FKUsuario que creó este registro.
created_atdatetimeFecha de creación.
updated_atdatetimeÚltima actualización.
deleted_atdatetimeEliminación lógica (si aplica).

3. 📋 episode

Representa un episodio clínico o motivo de atención de un paciente.

CampoTipoDescripción
episodestring(13) PKIdentificador único del episodio.
patientstring(13) FKPaciente relacionado.
start_datedateFecha de inicio del episodio.
end_datedateFecha de finalización.
reason_for_visitstringMotivo clínico del episodio.
general_notestextObservaciones generales.
authorstring(13) FKUsuario que creó el episodio.
created_atdatetimeFecha de creación.
updated_atdatetimeÚltima modificación.
deleted_atdatetimeFecha de eliminación lógica.

4. 🧪 study

Corresponde a un conjunto de imágenes o pruebas diagnósticas tomadas durante un episodio clínico.

CampoTipoDescripción
studystring(13) PKIdentificador del estudio.
episodestring(13) FKEpisodio al que pertenece.
study_datedateFecha del estudio.
study_typestringTipo (retinografía, OCT, etc.).
statusstringEstado del estudio (pendiente, evaluado).
observationstextComentarios generales del estudio.
authorstring(13) FKUsuario que generó el estudio.
created_atdatetimeFecha de creación.
updated_atdatetimeÚltima actualización.
deleted_atdatetimeEliminación lógica.

5. 🖼️ image

Cada registro representa una imagen retiniana obtenida dentro de un estudio.

CampoTipoDescripción
imagestring(13) PKID único de la imagen.
studystring(13) FKEstudio al que pertenece.
capture_datedateFecha de captura.
eyestringOjo correspondiente (izquierdo/derecho).
image_filestringRuta o nombre del archivo.
image_qualitystringEvaluación de la calidad.
operator_commentstextObservaciones del operador.
authorstring(13) FKUsuario que cargó la imagen.
created_atdatetimeFecha de carga.
updated_atdatetimeÚltima edición.
deleted_atdatetimeEliminación lógica.

6. 🤖 ai_report

Informe generado automáticamente por la IA con los resultados del análisis de una imagen.

CampoTipoDescripción
ai_reportstring(13) PKID del informe.
imagestring(13) FKImagen asociada.
analysis_datedateFecha de análisis.
ai_resultstextResultado del análisis IA.
confidence_scorefloatNivel de confianza (0–1).
ai_recommendationstextSugerencias de la IA.
authorstring(13) FKUsuario que ejecutó el análisis.
created_atdatetimeFecha de generación.
updated_atdatetimeModificación posterior.
deleted_atdatetimeEliminación lógica.

7. 🧑‍⚕️ report

Informe médico oficial de un estudio, validado por un profesional.

CampoTipoDescripción
reportstring(13) PKID del informe.
studystring(13) FKEstudio evaluado.
professionalstring(13) FKProfesional que emite el informe.
validation_datedateFecha de validación.
final_diagnosistextDiagnóstico confirmado.
observationstextNotas del médico.
is_validatedbooleanEstado de validación.
authorstring(13) FKUsuario que creó el registro.
created_atdatetimeCreación del informe.
updated_atdatetimeÚltima modificación.
deleted_atdatetimeEliminación lógica.

8. 👨‍⚕️ professional

Representa a los oftalmólogos o especialistas registrados.

CampoTipoDescripción
professionalstring(13) PKIdentificador único.
usernamestringNombre de usuario.
specialtystringEspecialidad médica.
emailstringCorreo del profesional.
passwordstringContraseña.
statusstringActivo/inactivo.
authorstring(13) FKUsuario que lo registró.
created_atdatetimeFecha de creación.
updated_atdatetimeModificación.
deleted_atdatetimeEliminación lógica.

🔗 Relaciones Principales del Modelo

  • user → patient, episode, study, image, ai_report, report, professional
    Relación por campo author: todo registro tiene trazabilidad de su creador.
  • patient → episode
    Un paciente puede tener múltiples episodios clínicos.
  • episode → study
    Cada episodio puede tener uno o varios estudios.
  • study → image
    Cada estudio puede contener múltiples imágenes diagnósticas.
  • image → ai_report
    Cada imagen es analizada por la IA, que genera un único reporte.
  • study → report → professional
    Un estudio puede tener un informe validado por un profesional.

🛡️ Ventajas del Modelo

  • Escalable y adaptable a múltiples escenarios clínicos.
  • Auditable: todos los registros tienen un campo author y timestamps.
  • Modular: separación clara entre IA, validación médica y administración.
  • Preparado para interoperabilidad con otros sistemas clínicos (e.g. HL7, FHIR).

Código UML

@startuml
title MER Model - IRIS (Intelligent Retinal Imaging System)

caption Created by Jose Alexis Correa Valencia · April 10, 2025 · [LinkedIn](https://www.linkedin.com/in/jalexiscv/)



entity patient {
  +patient : string(13) <<PK>>
  first_name : string
  last_name : string
  document_type : string
  document_number : string
  birth_date : date
  gender : string
  contact_info : string
  registration_date : date
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity episode {
  +episode : string(13) <<PK>>
  patient : string(13) <<FK>>
  start_date : date
  end_date : date
  reason_for_visit : string
  general_notes : text
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity study {
  +study : string(13) <<PK>>
  episode : string(13) <<FK>>
  study_date : date
  study_type : string
  status : string
  observations : text
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity image {
  +image : string(13) <<PK>>
  study : string(13) <<FK>>
  capture_date : date
  eye : string
  image_file : string
  image_quality : string
  operator_comments : text
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity ai_report {
  +ai_report : string(13) <<PK>>
  image : string(13) <<FK>>
  analysis_date : date
  ai_results : text
  confidence_score : float
  ai_recommendations : text
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity report {
  +report : string(13) <<PK>>
  study : string(13) <<FK>>
  professional : string(13) <<FK>>
  validation_date : date
  final_diagnosis : text
  observations : text
  is_validated : boolean
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity professional {
  +professional : string(13) <<PK>>
  username : string
  specialty : string
  email : string
  password : string
  status : string
  author : string(13) <<FK>>  ' FK to user.user
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

entity user {
  +user : string(13) <<PK>>
  username : string
  role : string
  email : string
  password : string
  status : string
  author : string(13) <<FK>>  ' auto-relación
  created_at : datetime
  updated_at : datetime
  deleted_at : datetime
}

' Relaciones de autoría
user ||--o{ patient : "author → user"
user ||--o{ episode : "author → user"
user ||--o{ study : "author → user"
user ||--o{ image : "author → user"
user ||--o{ ai_report : "author → user"
user ||--o{ report : "author → user"
user ||--o{ professional : "author → user"

' Relaciones clínicas
patient ||--o{ episode : has
episode ||--o{ study : includes
study ||--o{ image : contains
image ||--|| ai_report : generates
study ||--o{ report : evaluated_by
report }o--|| professional : performed_by

@enduml
Jose Alexis Correa Valencia

Consultor de sistemas informáticos avanzados con más de 25 años de experiencia en el sector privado. Su carrera se ha enfocado en el análisis y diseño de sistemas, la instalación y configuración de hardware y software, así como en la administración de redes para diversas empresas. Además, ha tenido el privilegio de ser capacitador en temáticas avanzadas, especializándose en el manejo de datos en línea, la seguridad de transacciones y los multimedios.

Ver todas las entradas