Data Model Overview
Prisma multi-file schema layout, bounded-context grouping, and how the data model mirrors the API route structure.
Sixième Étoile uses a Prisma multi-file schema split across bounded-context files under packages/database/prisma/schema/. Each file groups the models that belong to a single business domain, mirroring the API route structure (/vtc/contacts, /vtc/quotes, /vtc/missions, etc.).
Schema file layout
| File | Domain | Key models |
|---|---|---|
base.prisma | Generator / datasource | Prisma client config, Zod generator |
enums.prisma | Shared enumerations | All enums (TripType, QuoteStatus, MissionStatus, …) |
auth.prisma | Identity & multi-tenancy | User, Organization, Member, Session, Invitation |
crm.prisma | Contacts & CRM | Contact, EndCustomer, CrmActivity, AgencyValidationRule |
quotes.prisma | Commercial layer | Quote, QuoteLine, BlockTemplate |
orders.prisma | Orders & contracts | Order, PartnerContract, SubcontractorProfile |
missions.prisma | Operations | Mission, MissionExpense |
mission-transitions.prisma | Mission lifecycle | MissionTransition |
billing.prisma | Finance | Invoice, InvoiceLine, InvoicePayment, BankAccount, DocumentCounter |
fleet-vehicles.prisma | Fleet | Vehicle, VehicleCategory, OperatingBase, LicenseCategory |
fleet-drivers.prisma | Drivers | Driver, DriverLicense, DriverCalendarEvent, DriverRSECounter, DriverReview |
pricing-config.prisma | Pricing engine config | OrganizationPricingSettings, AdvancedRate, SeasonalMultiplier, OptionalFee, Promotion |
pricing-zones.prisma | Geographic pricing | PricingZone, ZoneRoute, ExcursionPackage, DispoPackage |
agency-portal.prisma | Agency portal | AgencyPortalUser, StaffDelegation |
tracking.prisma | Customer tracking | TrackingToken, TrackingMessage, TrackingNotification |
driver-location.prisma | Real-time GPS | DriverLocation, DriverLocationHistory |
documents.prisma | Document management | Document |
driver-documents.prisma | Driver legal docs | DriverDocument |
audit.prisma | Audit trail | ComplianceAuditLog, QuoteStatusAuditLog, QuoteNotesAuditLog |
activity.prisma | Business event log | Activity |
broadcast.prisma | Dispatch broadcasts | Broadcast, BroadcastRecipient |
notifications.prisma | Push notifications | PushSubscription, SilentAlert |
email.prisma | Email system | EmailConfig, EmailTemplate, EmailLog |
finance-portal.prisma | Finance magic links | FinanceMagicLink |
export-job.prisma | Export jobs | ExportJob |
developer.prisma | Developer APIs | ApiKey, WebhookConfig, AuditLog |
maps-cache.prisma | Maps & toll cache | TollCache, MapsCacheEntry |
realtime.prisma | SSE real-time | SseEvent |
Bounded-context grouping
The schema follows the same bounded-context boundaries as the Hono API:
packages/api/src/routes/vtc/
├── contacts.ts → crm.prisma
├── quotes.ts → quotes.prisma
├── missions.ts → missions.prisma + mission-transitions.prisma
├── orders.ts → orders.prisma
├── invoices.ts → billing.prisma
├── fleet/ → fleet-vehicles.prisma + fleet-drivers.prisma
├── pricing/ → pricing-config.prisma + pricing-zones.prisma
├── agency/ → agency-portal.prisma
└── tracking/ → tracking.prisma + driver-location.prismaKeeping schema files aligned with API route files makes it easy to locate the Prisma model for any endpoint without a global search.
Multi-tenancy: organizationId on every VTC model
Every business model carries an organizationId foreign key to Organization. Row-level isolation is enforced in every API handler via this column — no query fetches data across organization boundaries.
Organization
└── Contact / Quote / Mission / Invoice / Vehicle / Driver / …
└── all scoped to organizationIdThe Organization model is managed by Better Auth and serves as the top-level tenant.
Core data flow
Contact ──────────┐
▼
Quote ────── QuoteLine ───── Mission
│ │
▼ ▼
Invoice ── InvoiceLine MissionTransition
│
▼
InvoicePaymentAn Order optionally groups multiple quotes, missions, and invoices under a single reference (ORD-2026-001).
Section pages
| Page | Contents |
|---|---|
| Core entities | Organization, Contact, Quote, Mission, Driver, Vehicle |
| Relationships | FK graph, nullable quoteId, multi-tenancy |
| Constraints & semantics | HT pricing, vatRate format, TripType enum, key indexes |
See also: API Reference — every route maps back to the models described here.