|
|
@@ -1,344 +1,63 @@
|
|
|
-# Ani Assistant - Asistente Médico Virtual
|
|
|
+# Ani Assistant
|
|
|
|
|
|
-Una plataforma web completa para asistente virtual médico construida con Next.js, TypeScript, TailwindCSS y shadcn/ui.
|
|
|
+Plataforma de asistente médico virtual con Next.js, TypeScript y PostgreSQL.
|
|
|
|
|
|
-## 🚀 Características
|
|
|
+## Stack
|
|
|
|
|
|
-- **Autenticación completa** con NextAuth.js y roles de usuario (Admin/Doctor/Paciente)
|
|
|
-- **Chat médico inteligente** con integración de assistant-ui
|
|
|
-- **Generación automática de reportes médicos** después de 3 mensajes
|
|
|
-- **Base de datos PostgreSQL** con Prisma ORM
|
|
|
-- **Interfaz moderna y responsiva** con TailwindCSS y shadcn/ui
|
|
|
-- **Protección de rutas** según el rol del usuario
|
|
|
-- **Historial de reportes médicos** para pacientes y doctores
|
|
|
-- **Sistema de usernames únicos** generados automáticamente
|
|
|
-- **Almacenamiento de imágenes de perfil** en archivos
|
|
|
-- **Sistema de roles jerárquico** con permisos granulares
|
|
|
+Next.js 15 • TypeScript • PostgreSQL • Prisma • NextAuth.js • TailwindCSS • shadcn/ui
|
|
|
|
|
|
-## 🛠️ Tecnologías Utilizadas
|
|
|
+## Instalación Rápida
|
|
|
|
|
|
-- **Frontend**: Next.js 15, TypeScript, TailwindCSS
|
|
|
-- **UI Components**: shadcn/ui, assistant-ui
|
|
|
-- **Autenticación**: NextAuth.js
|
|
|
-- **Base de Datos**: PostgreSQL con Prisma ORM
|
|
|
-- **Encriptación**: bcryptjs
|
|
|
-- **Iconos**: Lucide React
|
|
|
-
|
|
|
-## 📋 Requisitos Previos
|
|
|
-
|
|
|
-- Node.js 18+
|
|
|
-- npm o yarn
|
|
|
-- PostgreSQL 12+ (instalado y ejecutándose)
|
|
|
-
|
|
|
-## 🚀 Instalación
|
|
|
-
|
|
|
-> **💡 Para una instalación rápida, consulta [guides/QUICK_START.md](guides/QUICK_START.md)**
|
|
|
-
|
|
|
-1. **Clonar el repositorio**
|
|
|
- ```bash
|
|
|
- git clone https://github.com/GeoShaPoH/ani-assistant
|
|
|
- cd ani-assistant
|
|
|
- ```
|
|
|
-
|
|
|
-2. **Instalar dependencias**
|
|
|
- ```bash
|
|
|
- npm install
|
|
|
- ```
|
|
|
-
|
|
|
-3. **Instalar y configurar PostgreSQL**
|
|
|
-
|
|
|
- Si no tienes PostgreSQL instalado:
|
|
|
-
|
|
|
- **Windows:**
|
|
|
- - Descarga desde [https://www.postgresql.org/download/windows/](https://www.postgresql.org/download/windows/)
|
|
|
- - O usa Chocolatey: `choco install postgresql`
|
|
|
-
|
|
|
- **Crear la base de datos:**
|
|
|
- ```bash
|
|
|
- psql -U postgres
|
|
|
- CREATE DATABASE ani_assistant;
|
|
|
- \q
|
|
|
- ```
|
|
|
-
|
|
|
-4. **Configurar variables de entorno**
|
|
|
-
|
|
|
- Copia el archivo `env.sample.txt` a `.env`:
|
|
|
- ```bash
|
|
|
- cp env.sample.txt .env
|
|
|
- ```
|
|
|
-
|
|
|
- Edita el archivo `.env` con tus valores:
|
|
|
- ```env
|
|
|
- # NextAuth
|
|
|
- NEXTAUTH_URL="http://localhost:3000"
|
|
|
- NEXTAUTH_SECRET="your-secret-key-here"
|
|
|
-
|
|
|
- # Database (PostgreSQL)
|
|
|
- DATABASE_URL="postgresql://postgres:tu-password@localhost:5432/ani_assistant"
|
|
|
-
|
|
|
- # OpenRouter (para el chat médico)
|
|
|
- OPENROUTER_API_KEY="tu-api-key-de-openrouter"
|
|
|
- OPENROUTER_URL="https://openrouter.ai/api/v1"
|
|
|
- OPENROUTER_MODEL="deepseek/deepseek-chat-v3-0324:free"
|
|
|
- ```
|
|
|
-
|
|
|
- **Nota**:
|
|
|
- - Reemplaza `tu-password` con la contraseña de tu usuario PostgreSQL
|
|
|
- - Si no configuras `OPENROUTER_API_KEY`, el chat funcionará con respuestas de fallback
|
|
|
- - Ejecuta `npm run check-env` para verificar la configuración
|
|
|
-
|
|
|
-5. **Configurar la base de datos**
|
|
|
- ```bash
|
|
|
- # Verificar configuración
|
|
|
- npm run check-env
|
|
|
-
|
|
|
- # Generar el cliente de Prisma
|
|
|
- npm run db:generate
|
|
|
-
|
|
|
- # Crear las tablas en PostgreSQL
|
|
|
- npm run db:push
|
|
|
-
|
|
|
- # Configurar usuarios de prueba
|
|
|
- npm run db:setup
|
|
|
- ```
|
|
|
-
|
|
|
-6. **Ejecutar el servidor de desarrollo**
|
|
|
- ```bash
|
|
|
- npm run dev
|
|
|
- ```
|
|
|
-
|
|
|
-7. **Abrir en el navegador**
|
|
|
- ```
|
|
|
- http://localhost:3000
|
|
|
- ```
|
|
|
-
|
|
|
-## 🗄️ Estructura de la Base de Datos
|
|
|
-
|
|
|
-### Tabla User
|
|
|
-- `id`: String (CUID)
|
|
|
-- `name`: String
|
|
|
-- `lastname`: String
|
|
|
-- `username`: String (único, generado automáticamente)
|
|
|
-- `email`: String (único)
|
|
|
-- `password`: String (hash)
|
|
|
-- `role`: Enum (ADMIN/DOCTOR/PATIENT)
|
|
|
-- `profileImage`: String? (URL de la imagen)
|
|
|
-- `createdAt`: DateTime
|
|
|
-- `updatedAt`: DateTime
|
|
|
-
|
|
|
-### Tabla Record
|
|
|
-- `id`: String (CUID)
|
|
|
-- `userId`: String (referencia a User)
|
|
|
-- `content`: String (reporte médico)
|
|
|
-- `messages`: Json (opcional, mensajes del chat)
|
|
|
-- `createdAt`: DateTime
|
|
|
-
|
|
|
-## 🔐 Roles de Usuario
|
|
|
-
|
|
|
-### Administrador (ADMIN)
|
|
|
-- Control total del sistema
|
|
|
-- Gestión de usuarios (doctores y pacientes)
|
|
|
-- Visualización de todos los reportes médicos
|
|
|
-- Administración de configuraciones del sistema
|
|
|
-- Estadísticas completas del sistema
|
|
|
-- **No tiene acceso al chat médico** (rol administrativo)
|
|
|
-
|
|
|
-### Doctor (DOCTOR)
|
|
|
-- Visualización de pacientes asignados
|
|
|
-- Acceso a reportes médicos de sus pacientes
|
|
|
-- Seguimiento de consultas
|
|
|
-- **No tiene acceso al chat médico** (no es paciente)
|
|
|
-- **No puede gestionar usuarios** (solo visualizar)
|
|
|
-
|
|
|
-### Paciente (PATIENT)
|
|
|
-- Acceso al chat médico (máximo 3 mensajes por sesión)
|
|
|
-- Visualización de sus propios reportes médicos
|
|
|
-- Generación automática de reportes
|
|
|
-- Historial completo de sus consultas
|
|
|
-
|
|
|
-## 📱 Páginas Principales
|
|
|
+```bash
|
|
|
+# 1. Instalar dependencias
|
|
|
+npm install
|
|
|
|
|
|
-- **/** - Página de inicio
|
|
|
-- **/auth/login** - Inicio de sesión
|
|
|
-- **/auth/register** - Registro de usuarios
|
|
|
-- **/dashboard** - Panel principal (según rol)
|
|
|
-- **/chat** - Chat médico (solo pacientes)
|
|
|
-- **/records** - Historial de reportes
|
|
|
-- **/admin** - Panel de administración (solo administradores)
|
|
|
+# 2. Configurar .env (copiar de env.sample.txt)
|
|
|
+DATABASE_URL="postgresql://postgres:password@localhost:5432/ani_assistant"
|
|
|
+NEXTAUTH_SECRET="your-secret"
|
|
|
+OPENROUTER_API_KEY="optional"
|
|
|
|
|
|
-## 🔧 Configuración para Producción
|
|
|
+# 3. Setup base de datos
|
|
|
+npm run db:push
|
|
|
+npm run db:setup
|
|
|
|
|
|
-### Variables de Entorno de Producción
|
|
|
-```env
|
|
|
-NEXTAUTH_URL="https://your-domain.com"
|
|
|
-NEXTAUTH_SECRET="your-production-secret-key"
|
|
|
-DATABASE_URL="postgresql://user:password@host:5432/ani_assistant"
|
|
|
-OPENROUTER_API_KEY="tu-api-key-de-openrouter"
|
|
|
+# 4. Iniciar
|
|
|
+npm run dev
|
|
|
```
|
|
|
|
|
|
-### Despliegue en VPS (Digital Ocean)
|
|
|
-
|
|
|
-1. **Configurar el servidor**
|
|
|
- ```bash
|
|
|
- # Instalar Node.js
|
|
|
- sudo apt update
|
|
|
- sudo apt install nodejs npm
|
|
|
-
|
|
|
- # Instalar PostgreSQL
|
|
|
- sudo apt install postgresql postgresql-contrib
|
|
|
- ```
|
|
|
-
|
|
|
-2. **Configurar PostgreSQL**
|
|
|
- ```bash
|
|
|
- # Crear usuario y base de datos
|
|
|
- sudo -u postgres psql
|
|
|
- CREATE USER ani_user WITH PASSWORD 'your_password';
|
|
|
- CREATE DATABASE ani_assistant OWNER ani_user;
|
|
|
- GRANT ALL PRIVILEGES ON DATABASE ani_assistant TO ani_user;
|
|
|
- \q
|
|
|
- ```
|
|
|
-
|
|
|
-3. **Desplegar la aplicación**
|
|
|
- ```bash
|
|
|
- # Clonar el repositorio
|
|
|
- git clone <repository-url>
|
|
|
- cd ani-assistant
|
|
|
-
|
|
|
- # Instalar dependencias
|
|
|
- npm install
|
|
|
-
|
|
|
- # Configurar variables de entorno
|
|
|
- cp env.sample.txt .env
|
|
|
- # Editar .env con las configuraciones de producción
|
|
|
-
|
|
|
- # Verificar configuración
|
|
|
- npm run check-env
|
|
|
-
|
|
|
- # Generar build de producción
|
|
|
- npm run build
|
|
|
-
|
|
|
- # Configurar base de datos
|
|
|
- npm run db:push
|
|
|
- npm run db:setup
|
|
|
-
|
|
|
- # Iniciar la aplicación
|
|
|
- npm start
|
|
|
- ```
|
|
|
-
|
|
|
-4. **Configurar PM2 (opcional)**
|
|
|
- ```bash
|
|
|
- npm install -g pm2
|
|
|
- pm2 start npm --name "ani-assistant" -- start
|
|
|
- pm2 startup
|
|
|
- pm2 save
|
|
|
- ```
|
|
|
+Ver [guides/QUICK_START.md](guides/QUICK_START.md) para más detalles.
|
|
|
|
|
|
-## 🔑 Configuración de OpenRouter
|
|
|
+## Roles
|
|
|
|
|
|
-Para que el chat médico funcione con IA, necesitas configurar OpenRouter:
|
|
|
+- **ADMIN**: Gestión de usuarios y sistema
|
|
|
+- **DOCTOR**: Visualización de pacientes y reportes
|
|
|
+- **PATIENT**: Chat médico y reportes personales
|
|
|
|
|
|
-1. **Registrarse en OpenRouter**
|
|
|
- - Ve a [https://openrouter.ai](https://openrouter.ai)
|
|
|
- - Crea una cuenta gratuita
|
|
|
- - Obtén tu API key desde el dashboard
|
|
|
-
|
|
|
-2. **Configurar la API key**
|
|
|
- - Agrega `OPENROUTER_API_KEY="tu-api-key"` en tu archivo `.env`
|
|
|
- - La aplicación usará el modelo Claude 3.5 Sonnet por defecto
|
|
|
-
|
|
|
-3. **Funcionamiento sin API key**
|
|
|
- - Si no configuras la API key, el chat funcionará con respuestas de fallback
|
|
|
- - Las respuestas serán básicas pero funcionales
|
|
|
-
|
|
|
-## 🧪 Datos de Prueba
|
|
|
-
|
|
|
-Para probar la aplicación, puedes usar los usuarios creados automáticamente:
|
|
|
-
|
|
|
-### Usuario Administrador
|
|
|
-- Email: `admin@ani-assistant.com`
|
|
|
-- Password: `admin123`
|
|
|
-- Username: Generado automáticamente (ej: `sadmin`)
|
|
|
-- Role: `ADMIN`
|
|
|
-
|
|
|
-### Usuario Doctor
|
|
|
-- Email: `doctor@ani-assistant.com`
|
|
|
-- Password: `doctor123`
|
|
|
-- Username: Generado automáticamente (ej: `dsistema`)
|
|
|
-- Role: `DOCTOR`
|
|
|
-
|
|
|
-### Usuario Paciente
|
|
|
-- Email: `patient@ani-assistant.com`
|
|
|
-- Password: `patient123`
|
|
|
-- Username: Generado automáticamente (ej: `pprueba`)
|
|
|
-- Role: `PATIENT`
|
|
|
-
|
|
|
-**Nota**: Los usernames se generan automáticamente usando la primera letra del nombre + apellido. Si ya existe, se agrega un número (ej: `pprueba1`, `pprueba2`).
|
|
|
-
|
|
|
-## 📝 Scripts Disponibles
|
|
|
+## Scripts
|
|
|
|
|
|
```bash
|
|
|
-npm run dev # Servidor de desarrollo
|
|
|
-npm run build # Build de producción
|
|
|
-npm run start # Servidor de producción
|
|
|
-npm run lint # Linting
|
|
|
-npm run check-env # Verificar variables de entorno
|
|
|
-npm run db:studio # Interfaz de Prisma
|
|
|
-npm run db:push # Crear/actualizar tablas
|
|
|
-npm run db:setup # Configurar usuarios de prueba
|
|
|
-npm run db:seed # Cargar datos de ejemplo
|
|
|
+npm run dev # Desarrollo
|
|
|
+npm run build # Producción
|
|
|
+npm run db:push # Migrar DB
|
|
|
+npm run db:setup # Usuarios de prueba
|
|
|
+npm run check-env # Verificar config
|
|
|
```
|
|
|
|
|
|
-## 🔒 Seguridad
|
|
|
-
|
|
|
-- Contraseñas encriptadas con bcryptjs
|
|
|
-- Sesiones JWT seguras
|
|
|
-- Protección de rutas por rol
|
|
|
-- Validación de datos en el servidor
|
|
|
-- Sanitización de inputs
|
|
|
-- Usernames únicos generados automáticamente
|
|
|
-- Almacenamiento seguro de imágenes de perfil
|
|
|
-
|
|
|
-## 🤝 Contribución
|
|
|
-
|
|
|
-1. Fork el proyecto
|
|
|
-2. Crea una rama para tu feature (`git checkout -b feature/AmazingFeature`)
|
|
|
-3. Commit tus cambios (`git commit -m 'Add some AmazingFeature'`)
|
|
|
-4. Push a la rama (`git push origin feature/AmazingFeature`)
|
|
|
-5. Abre un Pull Request
|
|
|
+## Producción
|
|
|
|
|
|
-## 📄 Licencia
|
|
|
-
|
|
|
-Este proyecto está bajo la **Licencia Apache 2.0**. Esta licencia proporciona:
|
|
|
-
|
|
|
-- **Protección de propiedad intelectual** más robusta que MIT
|
|
|
-- **Permite uso comercial** y distribución
|
|
|
-- **Requiere atribución** y preservación de copyright
|
|
|
-- **Protección de patentes** explícita
|
|
|
-- **Contribuciones claramente definidas** para evitar conflictos
|
|
|
-
|
|
|
-Ver el archivo [LICENSE](LICENSE) para los términos completos.
|
|
|
-
|
|
|
-### ¿Por qué Apache 2.0?
|
|
|
-
|
|
|
-La Licencia Apache 2.0 es ideal para proyectos que quieren:
|
|
|
-- Mantener el código abierto y colaborativo
|
|
|
-- Proteger mejor la propiedad intelectual del autor original
|
|
|
-- Permitir uso comercial sin restricciones
|
|
|
-- Definir claramente qué constituye una contribución
|
|
|
-- Proporcionar protección de patentes explícita
|
|
|
-
|
|
|
-## ⚠️ Disclaimer
|
|
|
-
|
|
|
-Esta aplicación es para fines educativos y de demostración. No debe usarse para diagnóstico médico real sin la supervisión de profesionales médicos calificados.
|
|
|
-
|
|
|
-## 🆘 Soporte
|
|
|
-
|
|
|
-Si tienes problemas o preguntas:
|
|
|
-
|
|
|
-1. Revisa la documentación
|
|
|
-2. Busca en los issues existentes
|
|
|
-3. Crea un nuevo issue con detalles del problema
|
|
|
+```bash
|
|
|
+# Configurar PostgreSQL
|
|
|
+psql -U postgres
|
|
|
+CREATE DATABASE ani_assistant;
|
|
|
+
|
|
|
+# Desplegar
|
|
|
+npm install
|
|
|
+npm run build
|
|
|
+npm run db:push
|
|
|
+npm run db:setup
|
|
|
+npm start
|
|
|
+```
|
|
|
|
|
|
---
|
|
|
|
|
|
-**Desarrollado con ❤️ para la comunidad médica**
|
|
|
+⚠️ Solo para fines educativos. No usar para diagnóstico médico real.
|