Vetria is een managementsoftware voor dierenklinieken, klaar om te functioneren als SaaS: veel klinieken in één installatie, elk geïsoleerd in de database met Row-Level Security van PostgreSQL. Het is geen UI-kit: agenda, klinisch dossier, recepten, betalingen, kassa, inventaris, ziekenhuisopname, tutorportaal en rapporten werken van begin tot eind, met een gedocumenteerde REST API, demo-gegevens en geautomatiseerde tests.
Taal: interface 100 % in het Spaans (Mexico)
De interface, e-mails, PDF's en validatieberichten zijn alleen in het Spaans, met formaten van Mexico (es-MX, standaard valuta MXN, BTW 16 %, CFDI). Het bevat geen systeem voor internationalisering (i18n) of vertalingen. De code-identifiers zijn in het Engels; de opmerkingen en documentatie zijn in het Spaans. Als je deze vertaalde aankondiging leest, is het product dat niet.
Voor wie het is
- Agentschappen en freelancers die software verkopen aan dierenartsen in Mexico en Latijns-Amerika.
- Ondernemers die hun eigen abonnements-SaaS voor dierenartsen willen lanceren.
- Teams die op zoek zijn naar een multi-tenant basis in TypeScript voor gezondheidszorg of diensten.
Functionaliteit
Agenda
- Afspraaklijst en kalender met slepen en neerzetten; detectie van overlappingen per dierenarts.
- Beschikbare tijden per dierenarts volgens de werkdag en tijdzone van de kliniek.
- Seriële afspraken (elke week, elke 2 weken of elke maand, van 2 tot 12): worden aangemaakt als individuele afspraken en de serie stopt bij de eerste overlap.
- Wachtlijst met suggesties wanneer er een gaatje vrijkomt en bevestiging van aanwezigheid via een link.
Klinisch dossier
- Patiënten met foto en meerdere patiënten per tutor; logische archivering die geschiedenis en betalingen behoudt.
- Klinische notities in Markdown met versiegeschiedenis.
- Vitale functies met gewichtsgrafiek en bijlagen (afbeeldingen met WebP-miniatuur).
- Vaccinaties en ontwormingen: komende boosters, vervaldatums en paspoort in PDF.
Recepten en documenten
- Recept in PDF met gedigitaliseerde handtekening en beroepsregistratie van de dierenarts.
- Ontvangsten, paspoort, kasafsluiting en ziekenhuisopnameblad in PDF.
Betalingen en kassa
- Totaal of gedeeltelijke betalingen per afspraak, met sequentieel nummer per kliniek.
- Kassa met opening, sluiting en telling (verwacht vs. geteld).
- CFDI-facturen gesimuleerd: XML en PDF van test zonder fiscale geldigheid, met de interface klaar om een echte PAC aan te sluiten.
Inventaris
- Catalogus van diensten en producten, voorraden met minimum en kardex van bewegingen.
- Automatische aftrek van voorraden bij het voltooien of innen van de afspraak, met terugbetaling als het wordt teruggedraaid.
Ziekenhuisopname
- Kooi en gebieden, opnames, opvolgingsnotities per dienst (ochtend, middag, avond) en ontslag.
Tutorportaal
- Toegang zonder wachtwoord via een magische link: afspraken, paspoort, recepten, ontvangsten en afspraakverzoeken.
- Verzoekbak voor personeel om te accepteren of af te wijzen.
Herinneringen
- Automatische herinneringen voor afspraken via e-mail, SMS of WhatsApp (Twilio), met een link om te bevestigen of te annuleren.
- Dagelijkse melding via e-mail van komende vaccinatie- en ontwormingsboosters die bijna vervallen.
- Logboek van elke verzending met zijn status.
Rapporten en export
- Dashboard en rapporten met grafieken per datum, dierenarts en betaalmethode.
- Export naar CSV en Excel (.xlsx); raadpleegbaar en exporteerbaar auditlogboek.
Multi-kliniek en vestigingen
- Registratie van klinieken, teamuitnodigingen en rollen: eigenaar, beheerder, dierenarts en receptie.
- Vestigingen met eigen tijdzone; abonnement per plannen met limieten (Stripe of gesimuleerde modus).
- Globale zoekfunctie met ⌘K / Ctrl+K, installeerbare PWA en standaard donkere modus.
Beveiliging
- RLS in PostgreSQL: de API gebruikt een rol zonder bypass, zodat een query niet buiten zijn kliniek kan komen.
- JWT met roterende refresh tokens in httpOnly-cookies, Argon2, e-mailverificatie en wachtwoordherstel.
- Rate limiting per IP en per kliniek, CSP en beveiligingsheaders, logs met requestId, Sentry optioneel.
Technische stack
CapaTechnologieMonorepo npm workspaces + Turborepo, strikte TypeScriptWebNext.js 15 (App Router), React 19, Tailwind CSS v4, Radix UI, FullCalendar, RechartsAPINestJS 11 op Fastify, Zod, OpenAPI/Swagger (meer dan 180 operaties)GegevensPostgreSQL 16, Drizzle ORM, versiegemigreerde migraties, RLSJobsRedis 7 + BullMQ (e-mails, herinneringen, back-ups), scheidbare workerBestandenS3-compatibele opslag (MinIO lokaal)KwaliteitVitest, Playwright, ESLint, GitHub Actions
Wat is inbegrepen
- Volledige broncode: web, API, worker, databaseschema, migraties en seed met 2 demo-klinieken.
- Docker Compose voor ontwikkeling, multi-stage Dockerfiles en CI- en release-workflows (afbeeldingen naar GHCR).
- 45 E2E-tests met Playwright en unit tests met Vitest.
- README en handleidingen in het Spaans: opstart, implementatie, beveiliging, back-ups en merkverandering.
- THIRD_PARTY_NOTICES.md en CHANGELOG. De npm-afhankelijkheden worden geïnstalleerd met pnpm (zitten niet in de ZIP).
Vereisten
- Node.js 22 LTS (aanbevolen; minimaal 20) en pnpm 10.
- Docker met Docker Compose v2 (Docker Desktop, OrbStack, Colima of Docker Engine).
Installatie
Na pnpm install en het kopiëren van .env.example naar .env:
- pnpm infra:up: Postgres, Redis, Mailpit en MinIO in Docker.
- pnpm db:migrate: schema, API-rol en en RLS-beleid.
- pnpm db:seed: demonstratiegegevens.
- pnpm dev: web op localhost:3000 en API op localhost:4000.
Implementatie
Stap-voor-stap handleidingen voor een VPS met Docker Compose en Caddy (automatische HTTPS), Fly.io en Google Cloud Run. De API-afbeelding bevat de commando's api, worker en migrate; inclusief runbook voor Postgres-back-ups naar S3.
Wat is gesimuleerd of vereist jouw accounts
- Stripe: de abonnementen voor klinieken werken in gesimuleerde modus; om echt te factureren heb je je eigen account en prijzen van Stripe nodig.
- Twilio: zonder inloggegevens worden SMS en WhatsApp alleen geregistreerd in het logboek; om te verzenden heb je je account nodig.
- Mail: lokaal wordt Mailpit gebruikt; in productie heb je je SMTP-provider nodig.
- CFDI: bevat geen PAC. De facturen zijn proefversies en hebben geen fiscale geldigheid; de structuur is klaar om een echte PAC aan te sluiten, waarvan de integratie en het contract voor jouw rekening zijn.
- Productie S3-opslag, PostgreSQL en Redis worden door jou geleverd.
Licentie
Wordt verkocht met de standaard koperlicentie van Bernuvia: je kunt Vetria gebruiken en aanpassen, het als je eigen SaaS implementeren en producten voor je klanten bouwen. Je kunt de code niet doorverkopen of herdistribueren als sjabloon. De open-source afhankelijkheden behouden hun licenties (THIRD_PARTY_NOTICES.md). De aankoop omvat geen rechten op het merk “Vetria”: er is een handleiding inbegrepen om je eigen merk te plaatsen.
Veelgestelde vragen
Is het in het Engels?
Nee. De interface, e-mails en PDF's zijn alleen in het Spaans (Mexico) en er is geen i18n-systeem. Je kunt er een toevoegen (bijvoorbeeld next-intl), maar dat vereist het extraheren van de teksten en is niet inbegrepen.
Zijn de CFDI-facturen geldig voor de SAT?
Nee. De interne generator produceert test-XML en PDF. Om te timbreren moet je een PAC inhuren en de connector in de meegeleverde interface implementeren.
Hoe worden de gegevens tussen klinieken geïsoleerd?
Elke tabel heeft de kliniek als sleutel en een RLS-beleid in PostgreSQL. De API maakt verbinding met een rol zonder bypass en stelt de kliniek in bij elke transactie.
Kan ik het als SaaS aan dierenartsen verkopen?
Ja, met jouw merk. Wat je niet kunt doen, is de code doorverkopen als sjabloon.
Heb ik Stripe of Twilio nodig om het te testen?
Nee. Zonder inloggegevens werken ze in gesimuleerde modus en alles wordt lokaal getest met Docker.
Kan ik een andere database gebruiken?
Niet zonder belangrijke delen opnieuw te schrijven: de isolatie hangt af van RLS van PostgreSQL 16.
Werkt het op de mobiel?
Het is een aanpasbare webapplicatie die als PWA kan worden geïnstalleerd. Het bevat geen native apps voor iOS of Android.