clinica-veterinaria/docs/_definitions/DATABASE-SCHEMA.md
2026-01-16 04:14:26 -06:00

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

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
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