Vetria è un software di gestione per cliniche veterinarie, pronto per operare come SaaS: molte cliniche in un'unica installazione, ciascuna isolata nel database con Row-Level Security di PostgreSQL. Non è un kit di UI: agenda, cartella clinica, ricette, incassi, cassa, inventario, ospedalizzazione, portale del tutore e report funzionano dall'inizio alla fine, con API REST documentata, dati demo e test automatizzati.
Lingua: interfaccia 100 % in spagnolo (Messico)
L'interfaccia, le email, i PDF e i messaggi di validazione sono solo in spagnolo, con formati del Messico (es-MX, valuta predefinita MXN, IVA 16 %, CFDI). Non include un sistema di internazionalizzazione (i18n) né traduzioni. Gli identificatori del codice sono in inglese; i commenti e la documentazione, in spagnolo. Se leggi questo annuncio tradotto, il prodotto non lo è.
Per chi è
- Agenzie e freelancer che vendono software a cliniche veterinarie in Messico e America Latina.
- Imprenditori che vogliono lanciare il proprio SaaS veterinario in abbonamento.
- Team che cercano una base multi-tenant in TypeScript per la salute o i servizi.
Funzionalità
Agenda
- Elenco degli appuntamenti e calendario con drag and drop; rilevamento di sovrapposizioni per veterinario.
- Orari disponibili per veterinario in base al turno e al fuso orario della clinica.
- Appuntamenti ricorrenti (ogni settimana, ogni 2 settimane o ogni mese, da 2 a 12): vengono creati come appuntamenti singoli e la serie si interrompe al primo sovrapposizione.
- Lista d'attesa con suggerimenti quando si libera un posto e conferma di partecipazione tramite link.
Cartella clinica
- Pazienti con foto e più pazienti per tutore; archiviazione logica che conserva la storia e i pagamenti.
- Note cliniche in Markdown con cronologia delle versioni.
- Segni vitali con grafico del peso e allegati (immagini con miniatura WebP).
- Vaccini e sverminazioni: prossimi richiami, scadenze e libretto in PDF.
Ricette e documenti
- Ricetta in PDF con firma digitalizzata e tesserino professionale del veterinario.
- Ricevute, libretto, chiusura cassa e foglio di ospedalizzazione in PDF.
Incassi e cassa
- Pagamenti totali o parziali per appuntamento, con numero sequenziale per clinica.
- Cassa con apertura, chiusura e riconciliazione (atteso vs. contato).
- Fatture CFDI simulate: XML e PDF di prova senza validità fiscale, con l'interfaccia pronta per connettersi a un PAC reale.
Inventario
- Catalogo di servizi e prodotti, scorte con minimo e kardex dei movimenti.
- Sconto automatico delle scorte al completamento o incasso dell'appuntamento, con restituzione se si annulla.
Ospedalizzazione
- Gabbie e aree, ricoveri, note di follow-up per turno (mattina, pomeriggio, sera) e dimissione.
Portale del tutore
- Accesso senza password tramite link magico: appuntamenti, libretto, ricette, ricevute e richiesta di appuntamenti.
- Casella di richieste per il personale per accettare o rifiutare.
Promemoria
- Promemoria automatici per appuntamenti via email, SMS o WhatsApp (Twilio), con link per confermare o annullare.
- Avviso giornaliero via email per richiami di vaccini e sverminazioni in scadenza.
- Registro di ogni invio con il suo stato.
Report e esportazione
- Dashboard e report con grafici per data, veterinario e metodo di pagamento.
- Esportazione in CSV e Excel (.xlsx); registro di audit consultabile ed esportabile.
Multi-clinica e filiali
- Registrazione di cliniche, inviti di team e ruoli: proprietario, amministratore, veterinario e reception.
- Filiali con fuso orario proprio; abbonamento per piani con limiti (Stripe o modalità simulata).
- Ricerca globale con ⌘K / Ctrl+K, PWA installabile e design scuro per impostazione predefinita.
Sicurezza
- RLS in PostgreSQL: l'API utilizza un ruolo senza bypass, quindi una query non può uscire dalla propria clinica.
- JWT con refresh token rotativi in cookie httpOnly, Argon2, verifica email e recupero password.
- Limitazione della velocità per IP e per clinica, CSP e intestazioni di sicurezza, log con requestId, Sentry opzionale.
Stack tecnico
CapaTecnologiaMonorepo npm workspaces + Turborepo, TypeScript rigorosoWebNext.js 15 (App Router), React 19, Tailwind CSS v4, Radix UI, FullCalendar, RechartsAPINestJS 11 su Fastify, Zod, OpenAPI/Swagger (più di 180 operazioni)DatiPostgreSQL 16, Drizzle ORM, migrazioni versionate, RLSJobsRedis 7 + BullMQ (email, promemoria, backup), worker separabileFileArchiviazione S3 compatibile (MinIO in locale)QualitàVitest, Playwright, ESLint, GitHub Actions
Cosa include
- Codice sorgente completo: web, API, worker, schema di database, migrazioni e seed con 2 cliniche demo.
- Docker Compose per sviluppo, Dockerfile multi-stage e workflow di CI e rilascio (immagini a GHCR).
- 45 test E2E con Playwright e test unitari con Vitest.
- README e guide in spagnolo: avvio, distribuzione, sicurezza, backup e rebranding.
- THIRD_PARTY_NOTICES.md e CHANGELOG. Le dipendenze npm vengono installate con pnpm (non incluse nello ZIP).
Requisiti
- Node.js 22 LTS (raccomandato; minimo 20) e pnpm 10.
- Docker con Docker Compose v2 (Docker Desktop, OrbStack, Colima o Docker Engine).
Installazione
Dopo pnpm install e copiare .env.example in .env:
- pnpm infra:up: Postgres, Redis, Mailpit e MinIO in Docker.
- pnpm db:migrate: schema, ruolo dell'API e politiche RLS.
- pnpm db:seed: dati di dimostrazione.
- pnpm dev: web su localhost:3000 e API su localhost:4000.
Distribuzione
Guide passo passo per un VPS con Docker Compose e Caddy (HTTPS automatico), Fly.io e Google Cloud Run. L'immagine dell'API include i comandi api, worker e migrate; include un runbook per i backup di Postgres su S3.
Cosa è simulato o richiede i tuoi account
- Stripe: l'abbonamento delle cliniche funziona in modalità simulata; per addebitare realmente hai bisogno del tuo account e dei prezzi di Stripe.
- Twilio: senza credenziali, SMS e WhatsApp vengono solo registrati nel log; per inviare hai bisogno del tuo account.
- Email: in locale si utilizza Mailpit; in produzione hai bisogno del tuo fornitore SMTP.
- CFDI: non include un PAC. I documenti sono di prova e non hanno validità fiscale; la struttura è pronta per connettere un PAC reale, la cui integrazione e contratto sono a tuo carico.
- Lo storage S3, PostgreSQL e Redis di produzione sono forniti da te.
Licenza
Viene venduto con la licenza standard di acquirente di Bernuvia: puoi utilizzare e modificare Vetria, distribuirlo come SaaS proprio e costruire prodotti per i tuoi clienti. Non puoi rivendere né ridistribuire il codice come template. Le dipendenze di codice aperto mantengono le loro licenze (THIRD_PARTY_NOTICES.md). L'acquisto non include diritti sul marchio “Vetria”: include una guida per impostare il tuo.
Domande frequenti
È in inglese?
No. L'interfaccia, le email e i PDF sono solo in spagnolo (Messico) e non c'è un sistema i18n. Puoi aggiungerne uno (ad esempio, next-intl), ma richiede di estrarre i testi e non è incluso.
Le fatture CFDI sono valide presso il SAT?
No. Il generatore interno produce XML e PDF di prova. Per timbrare devi contrattare un PAC e implementare il suo connettore nell'interfaccia inclusa.
Come vengono isolati i dati tra le cliniche?
Ogni tabella ha la clinica come chiave e una politica RLS in PostgreSQL. L'API si connette con un ruolo senza bypass e fissa la clinica in ogni transazione.
Posso venderlo come SaaS a cliniche veterinarie?
Sì, con il tuo marchio. Ciò che non puoi fare è rivendere il codice come template.
Ho bisogno di Stripe o Twilio per provarlo?
No. Senza credenziali funzionano in modalità simulata e tutto viene testato in locale con Docker.
Posso usare un altro database?
No, senza riscrivere parti importanti: l'isolamento dipende da RLS di PostgreSQL 16.
Funziona sul cellulare?
È un'applicazione web adattabile che può essere installata come PWA. Non include app native per iOS o Android.