Suite médica de escritorio y en la nube diseñada para consultorios. Permite registrar fichas de pacientes, llevar el historial clínico completo, digitalizar/escanear documentos físicos (WIA), importar padecimientos desde PDF, gestionar la agenda de turnos, emitir recetas médicas pre-selladas con firma digital procesada, enviar notificaciones por WhatsApp y correo electrónico (Gmail SMTP), y sincronizar datos con la nube de Supabase.
El proyecto está construido bajo una arquitectura desacoplada para desarrollo y consolidada para distribución ejecutable de escritorio:
- Core: React 18, TypeScript, Vite
- Estilos: Vanilla CSS moderno con variables CSS, animaciones suaves y diseño responsive.
- Puerto en desarrollo:
http://localhost:1420(o1421)
- Framework: FastAPI (Python 3.10+)
- Base de Datos: PostgreSQL en la nube vía Supabase Cloud API (
supabase-py) - Autenticación: Nombre y Matrícula Profesional + Bcrypt hashing para contraseñas de médicos
- Procesamiento de Firma/Sello: Pillow (PIL) para eliminación automática de fondos blancos en firmas escaneadas.
- Extracción de PDF:
pdfplumberpara la lectura e importación de archivos PDF como consultas médicas. - Escaneo Físico: Integración nativa con Windows Image Acquisition (WIA) a través de scripts de escáner.
- Puerto en desarrollo:
http://localhost:8000
Para que cualquier miembro del equipo pueda clonar, ejecutar y trabajar en el proyecto, necesita contar con los siguientes elementos instalados en su equipo:
- Sistema Operativo: Windows 10 o Windows 11.
- Node.js: Versión 18 o superior. Descargar Node.js
- Python: Versión 3.10 o superior (asegurarse de marcar la casilla "Add Python to PATH" durante la instalación). Descargar Python
- Microsoft Edge: Utilizado por los scripts para renderizar el frontend en "Modo Aplicación de Escritorio".
History-Ar/
├── frontend/ # Código fuente del cliente React + Vite
│ ├── src/
│ │ ├── App.tsx # Componente principal de la aplicación
│ │ ├── App.css / index.css
│ └── package.json
├── backend/ # API FastAPI y lógica del servidor Python
│ ├── app/
│ │ ├── main.py # Enrutador FastAPI y definición de endpoints
│ │ ├── crud.py # Operaciones CRUD sobre Supabase PostgreSQL
│ │ ├── schemas.py # Esquemas Pydantic / SQLModel para validaciones
│ │ ├── models.py # Modelos de datos del dominio
│ │ ├── supabase_client.py # Cliente de conexión a Supabase Cloud
│ │ └── scanner.py # Módulo de integración con escáneres WIA (Windows)
│ ├── supabase_schema.sql # Esquema SQL DDL para recrear las tablas en Supabase
│ ├── migrate_sqlite_to_supabase.py # Script utilitario de migración
│ └── requirements.txt # Dependencias de Python
├── setup.bat # Script de instalación inicial automática
├── dev.bat # Script de ejecución para entorno de desarrollo
└── build.bat # Script de compilación a ejecutable portable (.exe)
Ejecutar por única vez tras clonar el repositorio para crear el entorno virtual de Python (.venv), instalar los paquetes de requirements.txt e instalar las dependencias de Node.js en la carpeta frontend/:
.\setup.batLa aplicación está configurada para conectar por defecto con el proyecto en Supabase Cloud. Si necesitas conectar tu propia instancia de Supabase:
- Revisa o edita
SUPABASE_URLySUPABASE_KEYenbackend/app/supabase_client.pyo mediante variables de entorno. - En caso de crear un nuevo proyecto en Supabase, ejecuta el script de tabla en Supabase SQL Editor disponible en
backend/supabase_schema.sql.
Inicia el backend en FastAPI (puerto 8000) y el frontend en React Vite (puerto 1420) con recarga automática (Hot Reload) y abre la ventana en Microsoft Edge:
.\dev.batGenera la versión compilada estática de React, la copia al servidor FastAPI y compila el backend a un único archivo .exe con PyInstaller:
.\build.batEl ejecutable resultante se ubicará en backend/dist/History-Ar.exe.
- Autenticación Médica: Al iniciar la app por primera vez, registrar la cuenta médica con Nombre Completo y Número de Matrícula. Esta información se guarda en Supabase y se incluye automáticamente en los membretes de recetas e historias clínicas.
- Notificaciones por Email: Para habilitar el envío de correos automáticos de confirmación de turnos a los pacientes, el médico debe configurar en la pestaña Configuración su cuenta Gmail emisora y su Contraseña de aplicación de Google.
- Notificaciones por WhatsApp: Genera enlaces directos
https://api.whatsapp.com/sendformateando automáticamente números de Argentina (+549...).