Vetria es un software de gestión para clínicas veterinarias, listo para operarse como SaaS: muchas clínicas en una sola instalación, cada una aislada en la base de datos con Row-Level Security de PostgreSQL. No es un kit de UI: agenda, expediente clínico, recetas, cobros, caja, inventario, hospitalización, portal del tutor y reportes funcionan de punta a punta, con API REST documentada, datos demo y pruebas automatizadas.
Idioma: interfaz 100 % en español (México)
La interfaz, los correos, los PDF y los mensajes de validación están solo en español, con formatos de México (es-MX, moneda predeterminada MXN, IVA 16 %, CFDI). No incluye un sistema de internacionalización (i18n) ni traducciones. Los identificadores del código están en inglés; los comentarios y la documentación, en español. Si lees este anuncio traducido, el producto no lo está.
Para quién es
- Agencias y freelancers que venden software a veterinarias en México y Latinoamérica.
- Emprendedores que quieren lanzar su propio SaaS veterinario por suscripción.
- Equipos que buscan una base multi-tenant en TypeScript para salud o servicios.
Funcionalidad
Agenda
- Lista de citas y calendario con arrastrar y soltar; detección de empalmes por veterinario.
- Horarios disponibles por veterinario según la jornada y zona horaria de la clínica.
- Citas en serie (cada semana, cada 2 semanas o cada mes, de 2 a 12): se crean como citas individuales y la serie se detiene en el primer empalme.
- Lista de espera con sugerencias cuando se libera un hueco y confirmación de asistencia por enlace.
Expediente clínico
- Pacientes con foto y varios pacientes por tutor; archivado lógico que conserva historial y pagos.
- Notas clínicas en Markdown con historial de versiones.
- Signos vitales con gráfica de peso y adjuntos (imágenes con miniatura WebP).
- Vacunas y desparasitaciones: próximos refuerzos, vencimientos y cartilla en PDF.
Recetas y documentos
- Receta en PDF con firma digitalizada y cédula profesional del veterinario.
- Recibos, cartilla, corte de caja y hoja de hospitalización en PDF.
Cobros y caja
- Pagos totales o parciales por cita, con folio secuencial por clínica.
- Caja con apertura, cierre y arqueo (esperado vs. contado).
- Facturas CFDI simuladas: XML y PDF de prueba sin validez fiscal, con la interfaz lista para conectar un PAC real.
Inventario
- Catálogo de servicios y productos, existencias con mínimo y kardex de movimientos.
- Descuento automático de existencias al completar o cobrar la cita, con devolución si se revierte.
Hospitalización
- Jaulas y áreas, internamientos, notas de seguimiento por turno (mañana, tarde, noche) y alta.
Portal del tutor
- Acceso sin contraseña mediante enlace mágico: citas, cartilla, recetas, recibos y solicitud de citas.
- Bandeja de solicitudes para que el personal acepte o rechace.
Recordatorios
- Recordatorios automáticos de citas por correo, SMS o WhatsApp (Twilio), con enlace para confirmar o cancelar.
- Aviso diario por correo de refuerzos de vacunas y desparasitaciones próximos a vencer.
- Bitácora de cada envío con su estado.
Reportes y exportación
- Dashboard e informes con gráficas por fecha, veterinario y método de pago.
- Exportación a CSV y Excel (.xlsx); bitácora de auditoría consultable y exportable.
Multi-clínica y sucursales
- Registro de clínicas, invitaciones de equipo y roles: propietario, administrador, veterinario y recepción.
- Sucursales con zona horaria propia; suscripción por planes con límites (Stripe o modo simulado).
- Búsqueda global con ⌘K / Ctrl+K, PWA instalable y diseño oscuro por defecto.
Seguridad
- RLS en PostgreSQL: la API usa un rol sin bypass, así que una consulta no puede salir de su clínica.
- JWT con refresh tokens rotativos en cookies httpOnly, Argon2, verificación de correo y recuperación de contraseña.
- Rate limiting por IP y por clínica, CSP y cabeceras de seguridad, logs con requestId, Sentry opcional.
Stack técnico
CapaTecnologíaMonorepopnpm workspaces + Turborepo, TypeScript estrictoWebNext.js 15 (App Router), React 19, Tailwind CSS v4, Radix UI, FullCalendar, RechartsAPINestJS 11 sobre Fastify, Zod, OpenAPI/Swagger (más de 180 operaciones)DatosPostgreSQL 16, Drizzle ORM, migraciones versionadas, RLSJobsRedis 7 + BullMQ (correos, recordatorios, respaldos), worker separableArchivosAlmacenamiento S3 compatible (MinIO en local)CalidadVitest, Playwright, ESLint, GitHub Actions
Qué incluye
- Código fuente completo: web, API, worker, esquema de base de datos, migraciones y seed con 2 clínicas demo.
- Docker Compose para desarrollo, Dockerfiles multi-stage y workflows de CI y release (imágenes a GHCR).
- 45 pruebas E2E con Playwright y pruebas unitarias con Vitest.
- README y guías en español: inicio, despliegue, seguridad, respaldos y cambio de marca.
- THIRD_PARTY_NOTICES.md y CHANGELOG. Las dependencias npm se instalan con pnpm (no van en el ZIP).
Requisitos
- Node.js 22 LTS (recomendado; mínimo 20) y pnpm 10.
- Docker con Docker Compose v2 (Docker Desktop, OrbStack, Colima o Docker Engine).
Instalación
Tras pnpm install y copiar .env.example a .env:
- pnpm infra:up: Postgres, Redis, Mailpit y MinIO en Docker.
- pnpm db:migrate: esquema, rol de la API y políticas RLS.
- pnpm db:seed: datos de demostración.
- pnpm dev: web en localhost:3000 y API en localhost:4000.
Despliegue
Guías paso a paso para un VPS con Docker Compose y Caddy (HTTPS automático), Fly.io y Google Cloud Run. La imagen de la API trae los comandos api, worker y migrate; incluye runbook de respaldos de Postgres a S3.
Qué está simulado o requiere tus cuentas
- Stripe: la suscripción de clínicas funciona en modo simulado; para cobrar de verdad necesitas tu cuenta y precios de Stripe.
- Twilio: sin credenciales, SMS y WhatsApp solo se registran en la bitácora; para enviar necesitas tu cuenta.
- Correo: en local se usa Mailpit; en producción necesitas tu proveedor SMTP.
- CFDI: no incluye un PAC. Los comprobantes son de prueba y no tienen validez fiscal; la estructura está lista para conectar un PAC real, cuya integración y contrato corren por tu cuenta.
- Almacenamiento S3, PostgreSQL y Redis de producción los aportas tú.
Licencia
Se vende con la licencia estándar de comprador de Bernuvia: puedes usar y modificar Vetria, desplegarlo como SaaS propio y construir productos para tus clientes. No puedes revender ni redistribuir el código como plantilla. Las dependencias de código abierto conservan sus licencias (THIRD_PARTY_NOTICES.md). La compra no incluye derechos sobre la marca “Vetria”: incluye una guía para poner la tuya.
Preguntas frecuentes
¿Está en inglés?
No. La interfaz, los correos y los PDF están solo en español (México) y no hay sistema i18n. Puedes agregar uno (por ejemplo, next-intl), pero requiere extraer los textos y no está incluido.
¿Las facturas CFDI son válidas ante el SAT?
No. El generador interno produce XML y PDF de prueba. Para timbrar debes contratar un PAC e implementar su conector en la interfaz incluida.
¿Cómo se aíslan los datos entre clínicas?
Cada tabla tiene la clínica como clave y una política RLS en PostgreSQL. La API se conecta con un rol sin bypass y fija la clínica en cada transacción.
¿Puedo venderlo como SaaS a veterinarias?
Sí, con tu marca. Lo que no puedes es revender el código como plantilla.
¿Necesito Stripe o Twilio para probarlo?
No. Sin credenciales funcionan en modo simulado y todo se prueba en local con Docker.
¿Puedo usar otra base de datos?
No sin reescribir partes importantes: el aislamiento depende de RLS de PostgreSQL 16.
¿Funciona en el celular?
Es una aplicación web adaptable que se puede instalar como PWA. No incluye apps nativas para iOS ni Android.