Vetria ist eine Verwaltungssoftware für Tierarztpraxen, bereit für den Betrieb als SaaS: viele Praxen in einer einzigen Installation, jede isoliert in der Datenbank mit Row-Level Security von PostgreSQL. Es ist kein UI-Kit: Terminplanung, Patientenakte, Rezepte, Zahlungen, Kasse, Inventar, Hospitalisierung, Tutor-Portal und Berichte funktionieren von Anfang bis Ende, mit dokumentierter REST-API, Demodaten und automatisierten Tests.
Sprache: 100 % Benutzeroberfläche auf Spanisch (Mexiko)
Die Benutzeroberfläche, E-Mails, PDFs und Validierungsnachrichten sind nur auf Spanisch, mit Formaten aus Mexiko (es-MX, Standardwährung MXN, MwSt. 16 %, CFDI). Es enthält kein Internationalisierungssystem (i18n) oder Übersetzungen. Die Code-Identifikatoren sind in Englisch; die Kommentare und die Dokumentation sind auf Spanisch. Wenn Sie diese Übersetzung lesen, ist das Produkt nicht übersetzt.
Für wen es gedacht ist
- Agenturen und Freelancer, die Software an Tierarztpraxen in Mexiko und Lateinamerika verkaufen.
- Unternehmer, die ihr eigenes tierärztliches SaaS-Abonnement starten möchten.
- Teams, die eine Multi-Tenant-Basis in TypeScript für Gesundheits- oder Dienstleistungsanwendungen suchen.
Funktionalität
Terminplanung
- Terminliste und Kalender mit Drag-and-Drop; Erkennung von Überschneidungen nach Tierarzt.
- Verfügbare Zeiten nach Tierarzt gemäß Arbeitszeit und Zeitzone der Praxis.
- Serientermine (jede Woche, alle 2 Wochen oder jeden Monat, von 2 bis 12): werden als Einzeltermine erstellt und die Serie stoppt bei der ersten Überschneidung.
- Warteliste mit Vorschlägen, wenn ein Platz frei wird, und Bestätigung der Teilnahme über einen Link.
Patientenakte
- Patienten mit Foto und mehrere Patienten pro Tutor; logische Archivierung, die Historie und Zahlungen bewahrt.
- Klinische Notizen in Markdown mit Versionshistorie.
- Vitalzeichen mit Gewichtsgrafik und Anhängen (Bilder mit WebP-Vorschaubild).
- Impfungen und Entwurmungen: bevorstehende Auffrischungen, Ablauffristen und Impfpass im PDF-Format.
Rezepte und Dokumente
- Rezept im PDF-Format mit digitalisierter Unterschrift und Berufszulassung des Tierarztes.
- Quittungen, Impfpass, Kassenbericht und Krankenhausblatt im PDF-Format.
Zahlungen und Kasse
- Gesamt- oder Teilzahlungen pro Termin, mit fortlaufender Nummer pro Praxis.
- Kasse mit Eröffnung, Schließung und Kassenprüfung (erwartet vs. gezählt).
- CFDI-Rechnungen simuliert: XML und PDF-Testversion ohne steuerliche Gültigkeit, mit einer Schnittstelle, die bereit ist, sich mit einem echten PAC zu verbinden.
Inventar
- Katalog von Dienstleistungen und Produkten, Bestände mit Mindestbestand und Bewegungsprotokoll.
- Automatische Abzüge von Beständen beim Abschluss oder Bezahlen des Termins, mit Rückgabe, wenn es rückgängig gemacht wird.
Hospitalisierung
- Käfige und Bereiche, Hospitalisierungen, Nachverfolgungsnotizen nach Schicht (Morgen, Nachmittag, Nacht) und Entlassung.
Tutor-Portal
- Zugang ohne Passwort über einen magischen Link: Termine, Impfpass, Rezepte, Quittungen und Terminanforderungen.
- Anfragebox, damit das Personal akzeptieren oder ablehnen kann.
Erinnerungen
- Automatische Erinnerungen an Termine per E-Mail, SMS oder WhatsApp (Twilio), mit einem Link zur Bestätigung oder Stornierung.
- Tägliche Benachrichtigung per E-Mail über bevorstehende Auffrischungen von Impfungen und Entwurmungen.
- Protokoll jeder Sendung mit ihrem Status.
Berichte und Export
- Dashboard und Berichte mit Grafiken nach Datum, Tierarzt und Zahlungsmethode.
- Export nach CSV und Excel (.xlsx); einsehbares und exportierbares Prüfprotokoll.
Multi-Praxis und Filialen
- Registrierung von Praxen, Teameinladungen und Rollen: Eigentümer, Administrator, Tierarzt und Empfang.
- Filialen mit eigener Zeitzone; Abonnements nach Plänen mit Grenzen (Stripe oder simulierten Modus).
- Globale Suche mit ⌘K / Ctrl+K, installierbare PWA und standardmäßiges dunkles Design.
Sicherheit
- RLS in PostgreSQL: Die API verwendet eine Rolle ohne Bypass, sodass eine Abfrage nicht aus ihrer Praxis herauskommen kann.
- JWT mit rotierenden Refresh-Token in httpOnly-Cookies, Argon2, E-Mail-Verifizierung und Passwortwiederherstellung.
- Rate-Limiting nach IP und nach Praxis, CSP und Sicherheitsheader, Protokolle mit requestId, optional Sentry.
Technologiestack
CapaTechnologieMonorepo npm workspaces + Turborepo, strenges TypeScriptWebNext.js 15 (App Router), React 19, Tailwind CSS v4, Radix UI, FullCalendar, RechartsAPINestJS 11 über Fastify, Zod, OpenAPI/Swagger (mehr als 180 Operationen)DatenPostgreSQL 16, Drizzle ORM, versionierte Migrationen, RLSJobsRedis 7 + BullMQ (E-Mails, Erinnerungen, Backups), separierbarer WorkerDateienS3-kompatible Speicherung (MinIO lokal)QualitätVitest, Playwright, ESLint, GitHub Actions
Was ist enthalten
- Vollständiger Quellcode: Web, API, Worker, Datenbankschema, Migrationen und Seed mit 2 Demopraxen.
- Docker Compose für die Entwicklung, mehrstufige Dockerfiles und CI- und Release-Workflows (Bilder zu GHCR).
- 45 E2E-Tests mit Playwright und Unit-Tests mit Vitest.
- README und Anleitungen auf Spanisch: Einstieg, Bereitstellung, Sicherheit, Backups und Markenwechsel.
- THIRD_PARTY_NOTICES.md und CHANGELOG. Die npm-Abhängigkeiten werden mit pnpm installiert (sind nicht im ZIP enthalten).
Voraussetzungen
- Node.js 22 LTS (empfohlen; mindestens 20) und pnpm 10.
- Docker mit Docker Compose v2 (Docker Desktop, OrbStack, Colima oder Docker Engine).
Installation
Nach pnpm install und Kopieren von .env.example nach .env:
- pnpm infra:up: Postgres, Redis, Mailpit und MinIO in Docker.
- pnpm db:migrate: Schema, API-Rolle und RLS-Richtlinien.
- pnpm db:seed: Demodaten.
- pnpm dev: Web auf localhost:3000 und API auf localhost:4000.
Bereitstellung
Schritt-für-Schritt-Anleitungen für einen VPS mit Docker Compose und Caddy (automatisches HTTPS), Fly.io und Google Cloud Run. Das API-Image enthält die Befehle api, worker und migrate; es beinhaltet ein Runbook für Postgres-Backups auf S3.
Was ist simuliert oder erfordert deine Konten
- Stripe: Das Abonnement für Kliniken funktioniert im Simulationsmodus; um wirklich abzurechnen, benötigst du dein Konto und die Preise von Stripe.
- Twilio: Ohne Anmeldeinformationen werden SMS und WhatsApp nur im Protokoll aufgezeichnet; um zu senden, benötigst du dein Konto.
- Post: Lokal wird Mailpit verwendet; in der Produktion benötigst du deinen SMTP-Anbieter.
- CFDI: Enthält keinen PAC. Die Belege sind Testbelege und haben keine steuerliche Gültigkeit; die Struktur ist bereit, um einen echten PAC zu verbinden, dessen Integration und Vertrag in deiner Verantwortung liegen.
- Die S3-Speicherung, PostgreSQL und Redis in der Produktion stellst du bereit.
Lizenz
Wird mit der Standardlizenz für Käufer von Bernuvia verkauft: Du kannst Vetria verwenden und modifizieren, es als eigenes SaaS bereitstellen und Produkte für deine Kunden erstellen. Du darfst den Code nicht als Vorlage weiterverkaufen oder redistribuieren. Die Abhängigkeiten von Open-Source-Code behalten ihre Lizenzen (THIRD_PARTY_NOTICES.md). Der Kauf beinhaltet keine Rechte an der Marke „Vetria“: es enthält eine Anleitung, um deine eigene zu erstellen.
Häufig gestellte Fragen
Ist es auf Englisch?
Nein. Die Benutzeroberfläche, die E-Mails und die PDFs sind nur auf Spanisch (Mexiko) und es gibt kein i18n-System. Du kannst eines hinzufügen (zum Beispiel next-intl), aber es erfordert das Extrahieren der Texte und ist nicht enthalten.
Sind die CFDI-Rechnungen beim SAT gültig?
Nein. Der interne Generator produziert Test-XML und -PDF. Um zu stempeln, musst du einen PAC beauftragen und dessen Connector in der enthaltenen Benutzeroberfläche implementieren.
Wie werden die Daten zwischen Kliniken isoliert?
Jede Tabelle hat die Klinik als Schlüssel und eine RLS-Richtlinie in PostgreSQL. Die API verbindet sich mit einer Rolle ohne Umgehung und fixiert die Klinik bei jeder Transaktion.
Kann ich es als SaaS an Tierärzte verkaufen?
Ja, mit deiner Marke. Was du nicht tun kannst, ist den Code als Vorlage weiterzuverkaufen.
Benötige ich Stripe oder Twilio, um es auszuprobieren?
Nein. Ohne Anmeldeinformationen funktionieren sie im Simulationsmodus und alles wird lokal mit Docker getestet.
Kann ich eine andere Datenbank verwenden?
Nein, ohne wichtige Teile neu zu schreiben: Die Isolation hängt von RLS in PostgreSQL 16 ab.
Funktioniert es auf dem Handy?
Es ist eine anpassbare Webanwendung, die als PWA installiert werden kann. Es enthält keine nativen Apps für iOS oder Android.