Dominios del esquema
Recorrido por los 25 archivos de apps/api/src/db/schema, con las tablas clave de cada dominio y los detalles de catalog, billing, saas y tenants.
El esquema de ixiclinic está dividido por dominio: un archivo por área en
apps/api/src/db/schema/. Hay 25 archivos. Cada uno declara sus tablas con pgTable de
Drizzle.
Mapa de dominios
| Archivo | Qué contiene (tablas clave) |
|---|---|
tenants.ts | tenants, users, roles, refreshTokens — núcleo de identidad y autenticación |
branches.ts | branches, userTenants — sucursales y la membresía usuario↔tenant |
patients.ts | patients — el padrón de pacientes |
clients.ts | companies, clientAccounts, companyPackages, companyEmployees, clientRefreshTokens, patientInvitations, clientAppointments — empresas y portal de clientes |
catalog.ts | departments, testCategories, testCatalog, testParameters, referenceRanges, imagingCatalog, testProfiles, testProfileItems, packageItems, consultationCatalog, procedureCatalog, cardiologyStudiesCatalog — catálogo de pruebas, imágenes y servicios |
orders.ts | orders, orderTests, orderImaging, orderConsultations, orderProcedures, orderCardiology, referringDoctors, samples, sampleIncidents, sampleCollections, sampleCollectionTests — órdenes y muestras |
results.ts | testResults, imagingResults, imagingFiles, cultureResults, cultureIsolates, antibiogramEntries — resultados de lab, imágenes, cultivos y antibiograma |
billing.ts | invoices, invoiceItems, payments, creditNotes, taxTypes + caja: cashRegisters, cashSessions, cashMovements |
insurance.ts | insurances, insurancePlans, insurancePrices, insuranceClaims — seguros (ARS) y reclamaciones |
dgii.ts | fiscalSequences, ecfConfigurations, ecfSubmissions, dgiiReports — cumplimiento fiscal dominicano (NCF/e-CF) |
inventory.ts | inventoryCategories, inventoryItems, warehouses, inventoryStock, inventoryMovements — inventario multi-almacén |
qc.ts | qcLots, qcResults — control de calidad |
instruments.ts | instruments, instrumentTestMappings, instrumentResultsLog, autoverificationRules — equipos de laboratorio y autoverificación |
appointments.ts | appointments, appointmentReminders, appointmentSettings, consultationTypes, doctorSchedules, doctorScheduleOverrides, serviceCapacityBlocks, serviceCapacityOverrides, equipment, equipmentSchedules, equipmentScheduleOverrides — citas, horarios y capacidad |
queue.ts | queueStations, queueFlows, queueTickets, queueTicketSteps, queuePositions, queueScreens, queueKiosks, queueNotifications, queueCounters, queueSettings — sistema de turnos/cola |
prescriptions.ts | prescriptions, patientVitals, patientNotes — recetas y signos vitales |
encounters.ts | encounters — encuentros clínicos estructurados |
programs.ts | patientPrograms — programas crónicos (estilo ARS) |
activities.ts | activities, activityParticipants — actividades y sus participantes |
notifications.ts | notifications, notificationPreferences — notificaciones y preferencias |
chat.ts | chatConversations, chatParticipants, chatMessages — chat interno entre empleados |
printing.ts | bridges, printers, printJobs — agentes ixiclinic Connect, impresoras y trabajos de impresión |
templates.ts | documentTemplates, documentTemplateVersions — plantillas de documentos (recibos, recetas) y versiones |
audit.ts | auditLog — bitácora de auditoría |
saas.ts | saasUsers, plans, subscriptions, subscriptionHistory, demos, organizations, organizationTenants, saasSettings — gestión SaaS interna |
Detalles a destacar
catalog.ts — estructura jerárquica
El catálogo de pruebas de laboratorio es jerárquico:
testCategories → testCatalog → testParameters → referenceRanges
(categorías) (pruebas) (parámetros) (rangos de referencia)Una categoría agrupa pruebas; cada prueba tiene parámetros (los analitos medibles); cada
parámetro define sus rangos de referencia. Junto a la rama de laboratorio conviven el catálogo
de imágenes (imagingCatalog), los perfiles/paquetes (testProfiles, testProfileItems,
packageItems) y los catálogos de consultas, procedimientos y estudios de cardiología.
billing.ts — facturación y caja
Además de la facturación (invoices, invoiceItems, payments, creditNotes, taxTypes),
este archivo contiene las tablas de caja: cashRegisters (cajas), cashSessions
(sesiones/aperturas de caja) y cashMovements (entradas y salidas de efectivo).
saas.ts — gestión SaaS interna
Es el esquema que respalda la consola interna (console.ixiclinic.com): usuarios superadmin
(saasUsers), planes (plans), suscripciones (subscriptions, subscriptionHistory),
demos del landing (demos), organizaciones (organizations, organizationTenants) y ajustes
SaaS (saasSettings).
tenants.ts — identidad y autenticación
Aunque el archivo se llama tenants, aloja también la tabla users (con
preferences JSONB para el layout del escritorio por usuario), los roles y los
refreshTokens (tokens de refresco persistidos). La membresía usuario↔tenant
(userTenants) vive en branches.ts.
Gotcha: el glob no garantiza visibilidad en db
Las migraciones se generan con el glob ./src/db/schema/*, pero la instancia db de
apps/api/src/db/index.ts importa cada esquema explícitamente. Si añades un dominio nuevo
debes registrarlo allí (import + spread) para que db.query.<tabla> lo conozca. Ver
Drizzle ORM.
Neon vs Docker
Los dos entornos de base de datos de ixiclinic — Neon Serverless en desarrollo, PostgreSQL 17 en Docker en producción — y por qué el esquema debe aplicarse a ambos.
Referencia de API
Cómo está organizada la API REST de ixiclinic, su autenticación por Bearer JWT, los servidores y dónde vive la documentación OpenAPI interactiva (Scalar).