Modelo Físico – IRIS (Intelligent Retinal Imaging System)

🗓️ Fecha: 10 de abril de 2025

👤 Autor: Jose Alexis Correa Valencia
🔗 LinkedIn


📌 Objetivo del Modelo

El modelo físico de IRIS representa la estructura relacional definitiva que será implementada en un motor de base de datos (por ejemplo, MySQL o PostgreSQL), para soportar las funcionalidades del sistema de análisis oftalmológico con inteligencia artificial.

Incluye:

  • Entidades físicas (tablas)
  • Tipos de datos precisos
  • Claves primarias y foráneas
  • Campos de auditoría y trazabilidad

📘 Descripción de Tablas y Estructura de Campos

🧍‍♂️ user

Contiene los datos de los usuarios del sistema (administradores, operadores, etc.).

CampoTipoDescripción
userVARCHAR(13)Identificador único (PK)
usernameVARCHAR(255)Nombre de usuario
roleVARCHAR(50)Rol del usuario
emailVARCHAR(255)Correo electrónico
passwordVARCHAR(255)Contraseña encriptada
statusVARCHAR(50)Estado (activo/inactivo)
authorVARCHAR(13)Usuario que creó este registro (FK)
created_atDATETIMEFecha de creación del registro
updated_atDATETIMEÚltima actualización
deleted_atDATETIMEEliminación lógica

🧑‍⚕️ professional

Representa a los profesionales de la salud (oftalmólogos principalmente).

CampoTipoDescripción
professionalVARCHAR(13)Identificador único (PK)
usernameVARCHAR(255)Nombre de usuario
specialtyVARCHAR(100)Especialidad médica
emailVARCHAR(255)Correo electrónico
passwordVARCHAR(255)Contraseña encriptada
statusVARCHAR(50)Estado del profesional
authorVARCHAR(13)Usuario que lo registró (FK)
created_atDATETIMECreación del registro
updated_atDATETIMEÚltima modificación
deleted_atDATETIMEEliminación lógica

👁️ patient

Tabla de pacientes con sus datos personales y de contacto.

CampoTipoDescripción
patientVARCHAR(13)Identificador único (PK)
first_nameVARCHAR(100)Nombres
last_nameVARCHAR(100)Apellidos
document_typeVARCHAR(50)Tipo de documento
document_numberVARCHAR(50)Número de documento
birth_dateDATEFecha de nacimiento
genderVARCHAR(20)Género
contact_infoTEXTTeléfono, correo u otro contacto
registration_dateDATEFecha de registro
authorVARCHAR(13)Usuario creador (FK)
created_atDATETIMEFecha de creación
updated_atDATETIMEÚltima modificación
deleted_atDATETIMEEliminación lógica

📋 episode

Representa un episodio clínico dentro de la atención al paciente.

CampoTipoDescripción
episodeVARCHAR(13)Identificador único (PK)
patientVARCHAR(13)Referencia al paciente (FK)
start_dateDATEFecha de inicio del episodio
end_dateDATEFecha de finalización
reason_for_visitVARCHAR(255)Motivo de consulta
general_notesTEXTObservaciones generales
authorVARCHAR(13)Usuario que creó el episodio (FK)
created_atDATETIMECreación del episodio
updated_atDATETIMEModificación
deleted_atDATETIMEEliminación lógica

🔬 study

Cada estudio representa un conjunto de imágenes capturadas en una sola sesión diagnóstica.

CampoTipoDescripción
studyVARCHAR(13)Identificador del estudio (PK)
episodeVARCHAR(13)Episodio al que pertenece (FK)
study_dateDATEFecha del estudio
study_typeVARCHAR(100)Tipo de estudio (OCT, retinografía)
statusVARCHAR(50)Estado (pendiente, completado)
observationsTEXTObservaciones generales
authorVARCHAR(13)Usuario que creó el estudio (FK)
created_atDATETIMECreación del registro
updated_atDATETIMEModificación
deleted_atDATETIMEEliminación lógica

🖼️ image

Almacena los detalles de cada imagen retiniana.

CampoTipoDescripción
imageVARCHAR(13)ID único de imagen (PK)
studyVARCHAR(13)Estudio al que pertenece (FK)
capture_dateDATEFecha de captura
eyeVARCHAR(20)Ojo izquierdo/derecho
image_fileVARCHAR(255)Ruta o nombre del archivo
image_qualityVARCHAR(100)Calidad de imagen
operator_commentsTEXTNotas del operador
authorVARCHAR(13)Usuario que la cargó (FK)
created_atDATETIMEFecha de creación
updated_atDATETIMEÚltima modificación
deleted_atDATETIMEEliminación lógica

🤖 ai_report

Resultado del análisis automático por inteligencia artificial.

CampoTipoDescripción
ai_reportVARCHAR(13)ID del informe (PK)
imageVARCHAR(13)Imagen analizada (FK)
analysis_dateDATEFecha del análisis
ai_resultsTEXTResultado del análisis IA
confidence_scoreFLOATNivel de certeza del análisis
ai_recommendationsTEXTSugerencias automáticas
authorVARCHAR(13)Usuario que ejecutó (FK)
created_atDATETIMEFecha de creación
updated_atDATETIMEModificación
deleted_atDATETIMEEliminación lógica

📝 report

Informe final validado por el profesional de salud.

CampoTipoDescripción
reportVARCHAR(13)ID único del informe (PK)
studyVARCHAR(13)Estudio evaluado (FK)
professionalVARCHAR(13)Profesional que valida (FK)
validation_dateDATEFecha de validación
final_diagnosisTEXTDiagnóstico final
observationsTEXTObservaciones clínicas
is_validatedBOOLEANValidación confirmada o pendiente
authorVARCHAR(13)Usuario que creó el informe (FK)
created_atDATETIMECreación del informe
updated_atDATETIMEModificación
deleted_atDATETIMEEliminación lógica

🔗 Claves Foráneas y Relaciones

  • Todas las entidades contienen un campo author que referencia a user(user) como trazabilidad.
  • Relaciones clínicas:
    • patientepisode
    • episodestudy
    • studyimage, report
    • imageai_report
    • reportprofessional

Código SQL

CREATE TABLE user (
  user VARCHAR(13) PRIMARY KEY,
  username VARCHAR(255),
  role VARCHAR(50),
  email VARCHAR(255),
  password VARCHAR(255),
  status VARCHAR(50),
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE patient (
  patient VARCHAR(13) PRIMARY KEY,
  first_name VARCHAR(100),
  last_name VARCHAR(100),
  document_type VARCHAR(50),
  document_number VARCHAR(50),
  birth_date DATE,
  gender VARCHAR(20),
  contact_info TEXT,
  registration_date DATE,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE episode (
  episode VARCHAR(13) PRIMARY KEY,
  patient VARCHAR(13),
  start_date DATE,
  end_date DATE,
  reason_for_visit VARCHAR(255),
  general_notes TEXT,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE study (
  study VARCHAR(13) PRIMARY KEY,
  episode VARCHAR(13),
  study_date DATE,
  study_type VARCHAR(100),
  status VARCHAR(50),
  observations TEXT,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE image (
  image VARCHAR(13) PRIMARY KEY,
  study VARCHAR(13),
  capture_date DATE,
  eye VARCHAR(20),
  image_file VARCHAR(255),
  image_quality VARCHAR(100),
  operator_comments TEXT,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE ai_report (
  ai_report VARCHAR(13) PRIMARY KEY,
  image VARCHAR(13),
  analysis_date DATE,
  ai_results TEXT,
  confidence_score FLOAT,
  ai_recommendations TEXT,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE report (
  report VARCHAR(13) PRIMARY KEY,
  study VARCHAR(13),
  professional VARCHAR(13),
  validation_date DATE,
  final_diagnosis TEXT,
  observations TEXT,
  is_validated BOOLEAN,
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

CREATE TABLE professional (
  professional VARCHAR(13) PRIMARY KEY,
  username VARCHAR(255),
  specialty VARCHAR(100),
  email VARCHAR(255),
  password VARCHAR(255),
  status VARCHAR(50),
  author VARCHAR(13),
  created_at DATETIME,
  updated_at DATETIME,
  deleted_at DATETIME
);

-- Add foreign key constraints
ALTER TABLE patient ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE episode ADD FOREIGN KEY (patient) REFERENCES patient(patient);
ALTER TABLE episode ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE study ADD FOREIGN KEY (episode) REFERENCES episode(episode);
ALTER TABLE study ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE image ADD FOREIGN KEY (study) REFERENCES study(study);
ALTER TABLE image ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE ai_report ADD FOREIGN KEY (image) REFERENCES image(image);
ALTER TABLE ai_report ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE report ADD FOREIGN KEY (study) REFERENCES study(study);
ALTER TABLE report ADD FOREIGN KEY (professional) REFERENCES professional(professional);
ALTER TABLE report ADD FOREIGN KEY (author) REFERENCES user(user);
ALTER TABLE professional ADD FOREIGN KEY (author) REFERENCES user(user);

Código UML

@startuml
title Physical Data Model - IRIS (Intelligent Retinal Imaging System)
caption Created by Jose Alexis Correa Valencia · April 10, 2025 · [LinkedIn](https://www.linkedin.com/in/jalexiscv/)

entity user {
  *user : VARCHAR(13) <<PK>>
  --
  username : VARCHAR(255)
  role : VARCHAR(50)
  email : VARCHAR(255)
  password : VARCHAR(255)
  status : VARCHAR(50)
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity patient {
  *patient : VARCHAR(13) <<PK>>
  --
  first_name : VARCHAR(100)
  last_name : VARCHAR(100)
  document_type : VARCHAR(50)
  document_number : VARCHAR(50)
  birth_date : DATE
  gender : VARCHAR(20)
  contact_info : TEXT
  registration_date : DATE
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity episode {
  *episode : VARCHAR(13) <<PK>>
  --
  patient : VARCHAR(13) <<FK>>
  start_date : DATE
  end_date : DATE
  reason_for_visit : VARCHAR(255)
  general_notes : TEXT
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity study {
  *study : VARCHAR(13) <<PK>>
  --
  episode : VARCHAR(13) <<FK>>
  study_date : DATE
  study_type : VARCHAR(100)
  status : VARCHAR(50)
  observations : TEXT
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity image {
  *image : VARCHAR(13) <<PK>>
  --
  study : VARCHAR(13) <<FK>>
  capture_date : DATE
  eye : VARCHAR(20)
  image_file : VARCHAR(255)
  image_quality : VARCHAR(100)
  operator_comments : TEXT
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity ai_report {
  *ai_report : VARCHAR(13) <<PK>>
  --
  image : VARCHAR(13) <<FK>>
  analysis_date : DATE
  ai_results : TEXT
  confidence_score : FLOAT
  ai_recommendations : TEXT
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity report {
  *report : VARCHAR(13) <<PK>>
  --
  study : VARCHAR(13) <<FK>>
  professional : VARCHAR(13) <<FK>>
  validation_date : DATE
  final_diagnosis : TEXT
  observations : TEXT
  is_validated : BOOLEAN
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

entity professional {
  *professional : VARCHAR(13) <<PK>>
  --
  username : VARCHAR(255)
  specialty : VARCHAR(100)
  email : VARCHAR(255)
  password : VARCHAR(255)
  status : VARCHAR(50)
  author : VARCHAR(13) <<FK>>
  created_at : DATETIME
  updated_at : DATETIME
  deleted_at : DATETIME
}

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

' 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