SaniMat es una aplicación de escritorio académica para la gestión de una clínica médica. El sistema permite administrar pacientes, médicos, especialidades, turnos, pagos e historias clínicas, utilizando JavaFX para la interfaz gráfica y PostgreSQL como base de datos mediante conexión JDBC.
- Java 21 o superior
- JavaFX
- Maven
- PostgreSQL
- JDBC
El proyecto está organizado mediante una arquitectura por capas, separando la interfaz gráfica, la lógica de negocio, el acceso a datos y las entidades del dominio.
src/main/java/com/sanimat
├── app Inicio de la aplicación y navegación principal
├── config Configuración de conexión JDBC y sesión de usuario
├── controller Controladores de la interfaz
├── dao Acceso a datos mediante JDBC y PreparedStatement
├── model Entidades y enumeraciones del dominio
├── service Validaciones y reglas de negocio
├── util Utilidades de validación, contraseña y alertas
└── view Pantallas JavaFX
Para ejecutar el proyecto se necesita:
- Java 21 o una versión superior compatible.
- Maven instalado.
- PostgreSQL instalado y en ejecución.
- Base de datos
clinica_medicacreada.
- Crear la base de datos en PostgreSQL:
CREATE DATABASE clinica_medica;- Ejecutar el script principal del proyecto conectado a la base
clinica_medica:
psql -U postgres -d clinica_medica -f database/schema.sqlEl archivo database/schema.sql crea las tablas, restricciones, datos iniciales y vistas necesarias para el funcionamiento del prototipo.
La configuración inicial de conexión se encuentra en:
src/main/resources/database.properties
También puede generarse un archivo externo:
database.properties
Este archivo externo tiene prioridad sobre el archivo incluido en src/main/resources.
Además, la aplicación incluye un botón de configuración de conexión en la pantalla de login. Esta opción permite indicar host, puerto, base de datos, usuario y contraseña, además de probar la conexión antes de iniciar sesión. Fue incorporada para facilitar la ejecución y prueba del prototipo sin necesidad de modificar manualmente el archivo de configuración.
También pueden utilizarse variables de entorno:
SANIMAT_DB_URL
SANIMAT_DB_USER
SANIMAT_DB_PASSWORD
Desde la raíz del proyecto, ejecutar:
mvn javafx:runTambién puede abrirse el proyecto desde un entorno compatible con Maven y ejecutar la clase principal:
com.sanimat.app.MainApp
| Rol | Usuario | Contraseña |
|---|---|---|
| Secretaría | pabloSecre | 12345 |
Los usuarios de prueba se cargan desde el script database/schema.sql.
El prototipo incluye las siguientes funcionalidades principales:
- Inicio de sesión con usuario y contraseña.
- Navegación según rol.
- Menú principal para secretaría.
- Menú principal para médico.
- Gestión de especialidades.
- Gestión de médicos.
- Gestión de pacientes.
- Gestión de turnos.
- Cancelación de turnos.
- Actualización de turnos como finalizados o ausentes desde el perfil médico.
- Registro de pagos.
- Validación de pagos completos, sin pagos parciales.
- Consulta y actualización de historia clínica.
- Edición del perfil del médico autenticado.
- Conexión a PostgreSQL mediante JDBC.
- No se permiten turnos superpuestos para un mismo médico.
- Los horarios se generan en bloques de 30 minutos según la disponibilidad laboral del médico.
- Los turnos cancelados o finalizados no pueden modificarse.
- Los turnos cancelados no requieren pago.
- No se permiten pagos parciales.
- El monto del pago debe coincidir con el importe calculado por el sistema.
- Los datos obligatorios se validan antes de guardar.
- Se validan formatos como DNI, email, teléfono, matrícula y fechas.
- El acceso a las pantallas depende del rol del usuario autenticado.
El prototipo se centra en los módulos principales de gestión administrativa y médica de una clínica. La gestión de pacientes y turnos se centraliza desde el perfil de secretaría, mientras que el perfil médico permite consultar turnos asignados y trabajar con historias clínicas.
Algunas funcionalidades quedan contempladas como futuras ampliaciones del sistema, como el acceso directo de pacientes, la generación de recetas médicas, reportes completos y recordatorios automáticos de turnos.
No se implementa facturación electrónica ni gestión contable avanzada, ya que el módulo de pagos se limita al registro simple del cobro correspondiente al turno.
El script database/schema.sql define, entre otras, las siguientes tablas:
personassecretariosmedicospacientesespecialidadeshorarios_laboralesturnospagoshistorias_clinicasenum_estado_turnoenum_tipo_coberturaenum_medio_pago
Este proyecto fue desarrollado con fines académicos como prototipo funcional para la materia Seminario de Práctica de Informática.