DentAI — Sistema de gestión dental con MCP e interfaz de voz
Sistema moderno de gestión para clínicas dentales construido con Next.js 15, Prisma, TypeScript y PostgreSQL 16. Gestión de pacientes, tratamientos, pagos (bonos/abonos), agenda de citas con calendario visual e integración MCP para asistencia con IA y automatización por voz.
Descripción del proyecto
DentAI es un sistema web para clínicas dentales que digitaliza la gestión de pacientes, tratamientos, pagos y citas. Construido con Next.js 15 (App Router), Prisma, TypeScript y PostgreSQL 16. Integra un servidor MCP (Model Context Protocol) con 13 herramientas para gestión asistida por IA y soporte de interfaz de voz (STT/TTS) en el navegador.
Problemática
Un profesional dental que lleva todos sus registros en papel enfrenta:
- Pérdida de información y dificultad para rastrear deudas
- Sin historial digital de pagos ni tratamientos
- Comunicación manual con pacientes (llamadas, recordatorios a mano)
- Sin visibilidad del estado financiero (quién debe, cuánto, desde cuándo)
Módulos funcionales
- Gestión de pacientes — Registro completo, perfil con historial clínico y financiero, búsqueda por nombre o teléfono
- Tratamientos y pagos (bonos/abonos) — Crear tratamientos (bono = deuda total), registrar abonos parciales, saldo pendiente en tiempo real, barra de progreso de pago
- Agenda de citas — Calendario visual con FullCalendar (día/semana/mes), estados (SCHEDULED, CONFIRMED, CANCELLED, COMPLETED, NO_SHOW), validación de conflictos de horario
- WhatsApp — Recordatorios de citas, mensajes de cobro, mensajes libres directos a pacientes
- MCP Server — Agente de IA gestiona todo el sistema vía comandos naturales (13 tools)
- Interfaz de voz — Dictar operaciones sin tocar el teclado (Web Speech API para STT/TTS)
- Dashboard financiero — Ingresos por período, cuentas por cobrar, pacientes con mayor deuda
- Autenticación multi-dentista — Login con JWT, roles ADMIN/DENTIST, datos aislados por dentista
Tech Stack
| Capa | Tecnología | Justificación |
|---|---|---|
| Frontend | Next.js 15 (App Router) | SSR, API Routes, excelente DX |
| UI | Tailwind CSS + shadcn/ui | Componentes accesibles, diseño rápido |
| Base de datos | PostgreSQL 16 | Robusta, transacciones ACID para dinero |
| ORM | Prisma | Type-safe, migraciones, integración Next.js |
| MCP Server | TypeScript + @modelcontextprotocol/sdk | Protocolo estándar para herramientas de IA |
| API de WhatsApp Business | Mensajes directos a pacientes | |
| Voz (STT) | Web Speech API (navegador) | Sin costo, funciona en Chrome/Edge |
| Voz (TTS) | SpeechSynthesis API | Respuesta hablada al usuario |
| Calendario | @fullcalendar/react | Componente maduro, vistas día/semana/mes |
| Validación | Zod | Esquemas compartidos entre frontend, API y MCP |
| Moneda | Decimal.js / Prisma Decimal | Precisión en cálculos monetarios |
| Auth | JWT + bcrypt | Autenticación stateless con hash seguro |
| Contenedores | Docker + Docker Compose | Entorno reproducible, PostgreSQL incluido |
Arquitectura
Modelo de datos
Relaciones clave:
- Un paciente tiene muchos tratamientos (cada tratamiento es un “bono” = deuda)
- Cada tratamiento tiene muchos pagos/abonos parciales
- Saldo pendiente =
treatment.totalAmount - SUM(payments.amount)
MCP Server — Integración con IA
El servidor MCP expone 13 herramientas que permiten a un agente de IA gestionar toda la clínica vía comandos naturales:
Dentista (vía Copilot): "Registra un abono de $500 a María López
en su tratamiento de ortodoncia"
→ search_patients({ query: "María López" })
→ add_payment({ treatmentId: "clx...", amount: 500, method: "CASH" })
→ "✓ Abono de $500.00 registrado para María López.
Tratamiento: Ortodoncia | Saldo pendiente: $2,500.00"
Docker
| Servicio | Imagen | Puerto | Descripción |
|---|---|---|---|
| app | node:20-alpine (multi-stage) | 3000 | Next.js con hot-reload en dev |
| db | postgres:16-alpine | 5432 | PostgreSQL con volumen persistente |
Plan de desarrollo (sprints)
- Sprint 1 — Fundación + CRUD de pacientes (Docker + Prisma + API Routes)
- Sprint 2 — Tratamientos y pagos (bonos/abonos, dashboard financiero)
- Sprint 3 — Agenda de citas + integración WhatsApp
- Sprint 4 — Servidor MCP con 13 tools (
@modelcontextprotocol/sdk) - Sprint 5 — Interfaz de voz (STT/TTS) + pulido UI/UX
- Sprint 6 — Autenticación multi-dentista (JWT, roles ADMIN/DENTIST, datos aislados)
Buenas prácticas aplicadas
- Clean Architecture — Routes → Services → Repositories → Prisma
- Validación con Zod — Esquemas compartidos entre frontend, API y MCP server
- Precisión monetaria —
Decimal.jsy Prisma Decimal para cálculos financieros - Contenedores Docker — Entorno reproducible con Docker Compose (app + PostgreSQL)
- RBAC — Roles ADMIN/DENTIST con datos aislados por dentista
- Desarrollo por sprints — Iteraciones incrementales con entregables claros