15 KiB
15 KiB
Database Schema - clinica-veterinaria
Alias: @PROJ_DEF_DB Version: 1.0.0 Ultima actualizacion: 2026-01-16
1. RESUMEN
| Metrica | Valor |
|---|---|
| Schema Principal | veterinaria |
| Total Tablas | 15 |
| Total Catalogos | 3 |
| Total Enums | 5 |
| Total Relaciones | 18 |
| Tablas con RLS | 15 |
2. SCHEMAS
2.1 Schema: veterinaria
Schema principal con tablas especializadas para clinicas veterinarias.
catalogos:
- especies
- razas
- vacunas
tablas_core:
- propietarios
- mascotas
- cartilla_vacunacion
- desparasitaciones
tablas_hospitalizacion:
- hospitalizacion
- hospitalizacion_monitoreo
tablas_servicios:
- estetica
tablas_farmacia:
- medicamentos
- medicamentos_lotes
- dispensaciones
- movimientos_farmacia
- bitacora_controlados
2.2 Schemas Heredados
| Schema | Origen | Tablas Usadas |
|---|---|---|
| auth | erp-core | users, sessions, roles |
| tenants | erp-core | tenants, tenant_config |
| clinica | erp-clinicas | doctors, appointments, consultations |
3. ENUMS
3.1 sexo_animal
CREATE TYPE veterinaria.sexo_animal AS ENUM (
'macho',
'hembra',
'desconocido'
);
3.2 estado_hospitalizacion
CREATE TYPE veterinaria.estado_hospitalizacion AS ENUM (
'ingresado',
'en_tratamiento',
'estable',
'critico',
'alta',
'fallecido'
);
3.3 categoria_medicamento
CREATE TYPE veterinaria.categoria_medicamento AS ENUM (
'antibiotico',
'antiparasitario',
'analgesico',
'antiinflamatorio',
'vacuna',
'vitamina',
'dermatologico',
'oftalmico',
'cardiaco',
'digestivo',
'otro'
);
3.4 tipo_movimiento_farmacia
CREATE TYPE veterinaria.tipo_movimiento_farmacia AS ENUM (
'entrada',
'salida',
'ajuste_positivo',
'ajuste_negativo',
'devolucion',
'merma'
);
3.5 fraccion_controlada
CREATE TYPE veterinaria.fraccion_controlada AS ENUM (
'no_controlado',
'fraccion_i',
'fraccion_ii',
'fraccion_iii',
'fraccion_iv'
);
4. TABLAS PRINCIPALES
4.1 veterinaria.especies (Catalogo)
tabla: "especies"
schema: "veterinaria"
descripcion: "Catalogo de especies animales"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "nombre"
tipo: "VARCHAR(50)"
- nombre: "nombre_cientifico"
tipo: "VARCHAR(100)"
- nombre: "descripcion"
tipo: "TEXT"
- nombre: "active"
tipo: "BOOLEAN"
- nombre: "created_at"
tipo: "TIMESTAMPTZ"
indices:
- nombre: "idx_especies_tenant"
columnas: ["tenant_id"]
rls: true
4.2 veterinaria.razas (Catalogo)
tabla: "razas"
schema: "veterinaria"
descripcion: "Catalogo de razas por especie"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "especie_id"
tipo: "UUID"
fk: "veterinaria.especies"
- nombre: "nombre"
tipo: "VARCHAR(100)"
- nombre: "descripcion"
tipo: "TEXT"
- nombre: "tamanio_promedio"
tipo: "VARCHAR(20)"
- nombre: "peso_promedio_kg"
tipo: "NUMERIC(5,2)"
- nombre: "active"
tipo: "BOOLEAN"
indices:
- nombre: "idx_razas_tenant"
columnas: ["tenant_id"]
- nombre: "idx_razas_especie"
columnas: ["especie_id"]
rls: true
4.3 veterinaria.propietarios
tabla: "propietarios"
schema: "veterinaria"
descripcion: "Propietarios/duenos de mascotas"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "partner_id"
tipo: "UUID"
nullable: true
- nombre: "nombre"
tipo: "VARCHAR(100)"
- nombre: "apellidos"
tipo: "VARCHAR(100)"
- nombre: "telefono"
tipo: "VARCHAR(20)"
- nombre: "telefono_emergencia"
tipo: "VARCHAR(20)"
- nombre: "email"
tipo: "VARCHAR(100)"
- nombre: "direccion"
tipo: "TEXT"
- nombre: "rfc"
tipo: "VARCHAR(13)"
- nombre: "active"
tipo: "BOOLEAN"
indices:
- nombre: "idx_propietarios_tenant"
columnas: ["tenant_id"]
- nombre: "idx_propietarios_telefono"
columnas: ["telefono"]
rls: true
4.4 veterinaria.mascotas
tabla: "mascotas"
schema: "veterinaria"
descripcion: "Mascotas/pacientes de la clinica"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "propietario_id"
tipo: "UUID"
fk: "veterinaria.propietarios"
- nombre: "especie_id"
tipo: "UUID"
fk: "veterinaria.especies"
- nombre: "raza_id"
tipo: "UUID"
fk: "veterinaria.razas"
nullable: true
- nombre: "nombre"
tipo: "VARCHAR(100)"
- nombre: "sexo"
tipo: "veterinaria.sexo_animal"
- nombre: "fecha_nacimiento"
tipo: "DATE"
- nombre: "edad_aproximada"
tipo: "VARCHAR(50)"
- nombre: "color"
tipo: "VARCHAR(50)"
- nombre: "peso_kg"
tipo: "NUMERIC(6,2)"
- nombre: "numero_chip"
tipo: "VARCHAR(50)"
- nombre: "tiene_chip"
tipo: "BOOLEAN"
- nombre: "esterilizado"
tipo: "BOOLEAN"
- nombre: "fecha_esterilizacion"
tipo: "DATE"
- nombre: "alergias"
tipo: "TEXT"
- nombre: "condiciones_especiales"
tipo: "TEXT"
- nombre: "notas"
tipo: "TEXT"
- nombre: "foto_url"
tipo: "VARCHAR(255)"
- nombre: "active"
tipo: "BOOLEAN"
indices:
- nombre: "idx_mascotas_tenant"
columnas: ["tenant_id"]
- nombre: "idx_mascotas_propietario"
columnas: ["propietario_id"]
- nombre: "idx_mascotas_especie"
columnas: ["especie_id"]
- nombre: "idx_mascotas_chip"
columnas: ["numero_chip"]
parcial: "WHERE numero_chip IS NOT NULL"
rls: true
4.5 veterinaria.cartilla_vacunacion
tabla: "cartilla_vacunacion"
schema: "veterinaria"
descripcion: "Historial de vacunacion de mascotas"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "mascota_id"
tipo: "UUID"
fk: "veterinaria.mascotas"
- nombre: "vacuna_id"
tipo: "UUID"
fk: "veterinaria.vacunas"
- nombre: "veterinario_id"
tipo: "UUID"
fk: "clinica.doctors"
- nombre: "fecha_aplicacion"
tipo: "DATE"
- nombre: "fecha_proximo_refuerzo"
tipo: "DATE"
- nombre: "lote"
tipo: "VARCHAR(50)"
- nombre: "laboratorio"
tipo: "VARCHAR(100)"
- nombre: "observaciones"
tipo: "TEXT"
indices:
- nombre: "idx_cartilla_tenant"
columnas: ["tenant_id"]
- nombre: "idx_cartilla_mascota"
columnas: ["mascota_id"]
- nombre: "idx_cartilla_fecha"
columnas: ["fecha_proximo_refuerzo"]
rls: true
4.6 veterinaria.hospitalizacion
tabla: "hospitalizacion"
schema: "veterinaria"
descripcion: "Registro de hospitalizaciones"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
fk: true
- nombre: "mascota_id"
tipo: "UUID"
fk: "veterinaria.mascotas"
- nombre: "veterinario_id"
tipo: "UUID"
fk: "clinica.doctors"
- nombre: "consultation_id"
tipo: "UUID"
fk: "clinica.consultations"
- nombre: "fecha_ingreso"
tipo: "TIMESTAMPTZ"
- nombre: "motivo_ingreso"
tipo: "TEXT"
- nombre: "diagnostico_ingreso"
tipo: "TEXT"
- nombre: "area"
tipo: "VARCHAR(50)"
- nombre: "numero_jaula"
tipo: "VARCHAR(20)"
- nombre: "estado"
tipo: "veterinaria.estado_hospitalizacion"
- nombre: "fecha_alta"
tipo: "TIMESTAMPTZ"
- nombre: "diagnostico_alta"
tipo: "TEXT"
- nombre: "instrucciones_alta"
tipo: "TEXT"
indices:
- nombre: "idx_hospitalizacion_tenant"
columnas: ["tenant_id"]
- nombre: "idx_hospitalizacion_mascota"
columnas: ["mascota_id"]
- nombre: "idx_hospitalizacion_estado"
columnas: ["tenant_id", "estado"]
rls: true
4.7 veterinaria.medicamentos (Farmacia)
tabla: "medicamentos"
schema: "veterinaria"
descripcion: "Catalogo de medicamentos veterinarios"
columnas:
- nombre: "id"
tipo: "UUID"
pk: true
- nombre: "tenant_id"
tipo: "UUID"
- nombre: "codigo"
tipo: "VARCHAR(50)"
- nombre: "nombre"
tipo: "VARCHAR(150)"
- nombre: "nombre_comercial"
tipo: "VARCHAR(150)"
- nombre: "principio_activo"
tipo: "VARCHAR(200)"
- nombre: "categoria"
tipo: "veterinaria.categoria_medicamento"
- nombre: "presentacion"
tipo: "VARCHAR(100)"
- nombre: "concentracion"
tipo: "VARCHAR(50)"
- nombre: "laboratorio"
tipo: "VARCHAR(100)"
- nombre: "requiere_receta"
tipo: "BOOLEAN"
- nombre: "controlado"
tipo: "BOOLEAN"
- nombre: "fraccion_controlada"
tipo: "veterinaria.fraccion_controlada"
- nombre: "stock_minimo"
tipo: "INTEGER"
- nombre: "stock_actual"
tipo: "INTEGER"
- nombre: "precio_compra"
tipo: "NUMERIC(10,2)"
- nombre: "precio_venta"
tipo: "NUMERIC(10,2)"
- nombre: "especies_aplicables"
tipo: "UUID[]"
- nombre: "active"
tipo: "BOOLEAN"
indices:
- nombre: "idx_medicamentos_tenant"
columnas: ["tenant_id"]
- nombre: "idx_medicamentos_codigo"
columnas: ["codigo"]
- nombre: "idx_medicamentos_categoria"
columnas: ["categoria"]
- nombre: "idx_medicamentos_controlado"
columnas: ["controlado"]
rls: true
5. RELACIONES
HERENCIA
┌─────────────────────────────────────────────────────────┐
│ erp-core │
│ ├── auth.users │
│ └── tenants.tenants ─────────────────────────┐ │
└───────────────────────────────────────────────│─────────┘
│
┌─────────────────────────────────────────────────────────┐
│ erp-clinicas │ │
│ ├── clinica.doctors │ │
│ ├── clinica.appointments │ │
│ └── clinica.consultations ───────────────────│─────┐ │
└───────────────────────────────────────────────│─────│───┘
│ │
┌───────────────────────────────────────────────│─────│───┐
│ veterinaria (este proyecto) │ │ │
│ ▼ │ │
│ ┌─────────────┐ ┌─────────────┐ FK │ │
│ │ especies │◄──────│ razas │ │ │
│ └─────────────┘ FK └─────────────┘ │ │
│ │ │ │ │
│ │ FK │ FK │ │
│ ▼ ▼ │ │
│ ┌─────────────┐ ┌─────────────┐ │ │
│ │ propietarios│◄──────│ mascotas │◄────────────│ │
│ └─────────────┘ FK └─────────────┘ │ │
│ │ ▼ │
│ ┌─────────────────────┼─────────────────────┐ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌───────────┐ ┌───────────────────┐ ┌───────────┐│
│ │ cartilla_ │ │ desparasitaciones │ │hospitali- ││
│ │vacunacion │ │ │ │ zacion ││
│ └───────────┘ └───────────────────┘ └───────────┘│
│ │ │ │
│ ▼ ▼ │
│ ┌───────────┐ ┌───────────┐ │
│ │ vacunas │ │ monitoreo │ │
│ └───────────┘ └───────────┘ │
│ │
│ FARMACIA: │
│ ┌─────────────┐ ┌─────────────────┐ │
│ │medicamentos │◄────│medicamentos_lotes│ │
│ └─────────────┘ FK └─────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ dispensaciones │ │
│ └─────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────────────────────────┐ │
│ │ movimientos_farmacia │ │
│ │ bitacora_controlados │ │
│ └─────────────────────────────────────┘ │
└────────────────────────────────────────────────────────┘
6. ARCHIVOS DDL
| Archivo | Descripcion |
|---|---|
database/schemas/01-veterinaria-schema-ddl.sql |
Schema principal veterinaria |
database/schemas/02-veterinaria-farmacia-ddl.sql |
Modulo farmacia |
database/seeds/fase8/01-veterinaria-catalogos.sql |
Seeds de catalogos |
7. REFERENCIAS
- Inventario detallado:
orchestration/inventarios/DATABASE_INVENTORY.yml - Entities: Ver @PROJ_DEF_ENTITIES
- Navegacion rapida: Ver
docs/_quick/QUICK-DATABASE.yml
Generado: 2026-01-16 - clinica-veterinaria v1.0.0