eeeeeeeeeeeeee six seven !!!!!

Matthew Trejo 3a1d303bea add initial appointment support 2 tháng trước cách đây
docs 3a1d303bea add initial appointment support 2 tháng trước cách đây
guides 0cf6b9653b new start for sure 2 tháng trước cách đây
prisma 3a1d303bea add initial appointment support 2 tháng trước cách đây
public 0cf6b9653b new start for sure 2 tháng trước cách đây
scripts a66e7da6b6 properly add admin role 2 tháng trước cách đây
src 3a1d303bea add initial appointment support 2 tháng trước cách đây
uploads 0cf6b9653b new start for sure 2 tháng trước cách đây
.gitignore 0cf6b9653b new start for sure 2 tháng trước cách đây
README.md a66e7da6b6 properly add admin role 2 tháng trước cách đây
components.json 0cf6b9653b new start for sure 2 tháng trước cách đây
ecosystem.config.js 0cf6b9653b new start for sure 2 tháng trước cách đây
env.sample.txt fe7b5b4d7d only use utb api for auth 2 tháng trước cách đây
eslint.config.mjs 0cf6b9653b new start for sure 2 tháng trước cách đây
middleware.ts 0cf6b9653b new start for sure 2 tháng trước cách đây
next.config.ts 0cf6b9653b new start for sure 2 tháng trước cách đây
package-lock.json 3a1d303bea add initial appointment support 2 tháng trước cách đây
package.json 3a1d303bea add initial appointment support 2 tháng trước cách đây
postcss.config.js 0cf6b9653b new start for sure 2 tháng trước cách đây
tailwind.config.js 0cf6b9653b new start for sure 2 tháng trước cách đây
tsconfig.json 0cf6b9653b new start for sure 2 tháng trước cách đây

README.md

Ani Assistant - Asistente Médico Virtual

Una plataforma web completa para asistente virtual médico construida con Next.js, TypeScript, TailwindCSS y shadcn/ui.

🚀 Características

  • 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

🛠️ Tecnologías Utilizadas

  • 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

  1. Clonar el repositorio

    git clone https://github.com/GeoShaPoH/ani-assistant
    cd ani-assistant
    
  2. Instalar dependencias

    npm install
    
  3. Instalar y configurar PostgreSQL

Si no tienes PostgreSQL instalado:

Windows:

Crear la base de datos:

   psql -U postgres
   CREATE DATABASE ani_assistant;
   \q
  1. Configurar variables de entorno

Copia el archivo env.sample.txt a .env:

   cp env.sample.txt .env

Edita el archivo .env con tus valores:

   # 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
  1. Configurar la base de datos

    # 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
    
  2. Ejecutar el servidor de desarrollo

    npm run dev
    
  3. 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

  • / - 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)

🔧 Configuración para Producción

Variables de Entorno de Producción

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"

Despliegue en VPS (Digital Ocean)

  1. Configurar el servidor

    # Instalar Node.js
    sudo apt update
    sudo apt install nodejs npm
       
    # Instalar PostgreSQL
    sudo apt install postgresql postgresql-contrib
    
  2. Configurar PostgreSQL

    # 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

    # 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)

    npm install -g pm2
    pm2 start npm --name "ani-assistant" -- start
    pm2 startup
    pm2 save
    

🔑 Configuración de OpenRouter

Para que el chat médico funcione con IA, necesitas configurar OpenRouter:

  1. Registrarse en OpenRouter

  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

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

🔒 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

📄 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 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

Desarrollado con ❤️ para la comunidad médica