535 lines
15 KiB
Markdown
535 lines
15 KiB
Markdown
# 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.
|
|
|
|
```yaml
|
|
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
|
|
```sql
|
|
CREATE TYPE veterinaria.sexo_animal AS ENUM (
|
|
'macho',
|
|
'hembra',
|
|
'desconocido'
|
|
);
|
|
```
|
|
|
|
### 3.2 estado_hospitalizacion
|
|
```sql
|
|
CREATE TYPE veterinaria.estado_hospitalizacion AS ENUM (
|
|
'ingresado',
|
|
'en_tratamiento',
|
|
'estable',
|
|
'critico',
|
|
'alta',
|
|
'fallecido'
|
|
);
|
|
```
|
|
|
|
### 3.3 categoria_medicamento
|
|
```sql
|
|
CREATE TYPE veterinaria.categoria_medicamento AS ENUM (
|
|
'antibiotico',
|
|
'antiparasitario',
|
|
'analgesico',
|
|
'antiinflamatorio',
|
|
'vacuna',
|
|
'vitamina',
|
|
'dermatologico',
|
|
'oftalmico',
|
|
'cardiaco',
|
|
'digestivo',
|
|
'otro'
|
|
);
|
|
```
|
|
|
|
### 3.4 tipo_movimiento_farmacia
|
|
```sql
|
|
CREATE TYPE veterinaria.tipo_movimiento_farmacia AS ENUM (
|
|
'entrada',
|
|
'salida',
|
|
'ajuste_positivo',
|
|
'ajuste_negativo',
|
|
'devolucion',
|
|
'merma'
|
|
);
|
|
```
|
|
|
|
### 3.5 fraccion_controlada
|
|
```sql
|
|
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)
|
|
|
|
```yaml
|
|
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)
|
|
|
|
```yaml
|
|
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
|
|
|
|
```yaml
|
|
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
|
|
|
|
```yaml
|
|
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
|
|
|
|
```yaml
|
|
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
|
|
|
|
```yaml
|
|
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)
|
|
|
|
```yaml
|
|
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*
|