--- # DATABASE INVENTORY - Clinica Veterinaria # Version: 1.0.0 # Ultima actualizacion: 2026-01-07 proyecto: "clinica-veterinaria" schema_principal: "veterinaria" version_ddl: "1.0" estado: "completado" herencia: vertical_padre: "erp-clinicas" suite_core: "erp-core" schemas_heredados: - name: "auth" desde: "erp-core" - name: "tenants" desde: "erp-core" - name: "users" desde: "erp-core" - name: "clinica" desde: "erp-clinicas" tablas: ["doctors", "appointments", "consultations"] enums: - name: "sexo_animal" values: - "macho" - "hembra" - "desconocido" - name: "estado_hospitalizacion" values: - "ingresado" - "en_tratamiento" - "estable" - "critico" - "alta" - "fallecido" catalogos: - name: "especies" descripcion: "Catalogo de especies animales" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "nombre: VARCHAR(50)" - "nombre_cientifico: VARCHAR(100)" - "descripcion: TEXT" - "active: BOOLEAN" - name: "razas" descripcion: "Catalogo de razas por especie" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "especie_id: UUID FK" - "nombre: VARCHAR(100)" - "descripcion: TEXT" - "tamanio_promedio: VARCHAR(20)" - "peso_promedio_kg: NUMERIC(5,2)" - "active: BOOLEAN" - name: "vacunas" descripcion: "Catalogo de vacunas veterinarias" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "nombre: VARCHAR(100)" - "descripcion: TEXT" - "especie_id: UUID FK" - "laboratorio: VARCHAR(100)" - "dosis_ml: NUMERIC(5,2)" - "intervalo_refuerzo_dias: INTEGER" - "es_obligatoria: BOOLEAN" - "active: BOOLEAN" tablas: - name: "propietarios" descripcion: "Propietarios/duenos de mascotas" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "partner_id: UUID FK (opcional)" - "nombre: VARCHAR(100)" - "apellidos: VARCHAR(100)" - "telefono: VARCHAR(20)" - "telefono_emergencia: VARCHAR(20)" - "email: VARCHAR(100)" - "direccion: TEXT" - "rfc: VARCHAR(13)" - "active: BOOLEAN" indices: - "idx_propietarios_tenant" - "idx_propietarios_telefono" - name: "mascotas" descripcion: "Mascotas/pacientes de la clinica" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "propietario_id: UUID FK" - "especie_id: UUID FK" - "raza_id: UUID FK" - "nombre: VARCHAR(100)" - "sexo: veterinaria.sexo_animal" - "fecha_nacimiento: DATE" - "edad_aproximada: VARCHAR(50)" - "color: VARCHAR(50)" - "peso_kg: NUMERIC(6,2)" - "numero_chip: VARCHAR(50)" - "tiene_chip: BOOLEAN" - "esterilizado: BOOLEAN" - "fecha_esterilizacion: DATE" - "alergias: TEXT" - "condiciones_especiales: TEXT" - "notas: TEXT" - "foto_url: VARCHAR(255)" - "active: BOOLEAN" indices: - "idx_mascotas_tenant" - "idx_mascotas_propietario" - "idx_mascotas_especie" - "idx_mascotas_chip" - name: "cartilla_vacunacion" descripcion: "Historial de vacunacion de mascotas" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "mascota_id: UUID FK" - "vacuna_id: UUID FK" - "veterinario_id: UUID FK" - "fecha_aplicacion: DATE" - "fecha_proximo_refuerzo: DATE" - "lote: VARCHAR(50)" - "laboratorio: VARCHAR(100)" - "observaciones: TEXT" indices: - "idx_cartilla_tenant" - "idx_cartilla_mascota" - "idx_cartilla_fecha" - name: "desparasitaciones" descripcion: "Historial de desparasitaciones" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "mascota_id: UUID FK" - "veterinario_id: UUID FK" - "tipo: VARCHAR(50)" - "producto: VARCHAR(100)" - "dosis: VARCHAR(50)" - "via_administracion: VARCHAR(50)" - "fecha_aplicacion: DATE" - "fecha_proxima: DATE" - "observaciones: TEXT" indices: - "idx_desparasitaciones_tenant" - "idx_desparasitaciones_mascota" - name: "hospitalizacion" descripcion: "Registro de hospitalizaciones" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "mascota_id: UUID FK" - "veterinario_id: UUID FK" - "consultation_id: UUID FK" - "fecha_ingreso: TIMESTAMPTZ" - "motivo_ingreso: TEXT" - "diagnostico_ingreso: TEXT" - "area: VARCHAR(50)" - "numero_jaula: VARCHAR(20)" - "estado: veterinaria.estado_hospitalizacion" - "fecha_alta: TIMESTAMPTZ" - "diagnostico_alta: TEXT" - "instrucciones_alta: TEXT" indices: - "idx_hospitalizacion_tenant" - "idx_hospitalizacion_mascota" - "idx_hospitalizacion_estado" - name: "hospitalizacion_monitoreo" descripcion: "Monitoreo durante hospitalizacion" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "hospitalizacion_id: UUID FK" - "fecha_hora: TIMESTAMPTZ" - "peso_kg: NUMERIC(6,2)" - "temperatura: NUMERIC(4,1)" - "frecuencia_cardiaca: INTEGER" - "frecuencia_respiratoria: INTEGER" - "comio: BOOLEAN" - "bebio_agua: BOOLEAN" - "orino: BOOLEAN" - "defeco: BOOLEAN" - "consistencia_heces: VARCHAR(50)" - "estado_animo: VARCHAR(50)" - "nivel_dolor: INTEGER (0-10)" - "observaciones: TEXT" - "registrado_por: UUID FK" indices: - "idx_hospitalizacion_monitoreo_hosp" - name: "estetica" descripcion: "Servicios de estetica/grooming" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "mascota_id: UUID FK" - "estilista_id: UUID FK" - "fecha_servicio: TIMESTAMPTZ" - "servicios: TEXT[]" - "tipo_corte: VARCHAR(50)" - "shampoo_usado: VARCHAR(100)" - "estado: VARCHAR(20)" - "hora_inicio: TIME" - "hora_fin: TIME" - "observaciones: TEXT" - "observaciones_piel: TEXT" - "precio: NUMERIC(10,2)" indices: - "idx_estetica_tenant" - "idx_estetica_mascota" - "idx_estetica_fecha" extensiones_clinica: tabla: "clinica.consultations" columnas_agregadas: - "mascota_id: UUID FK" - "peso_actual: NUMERIC(6,2)" - "temperatura: NUMERIC(4,1)" # ============================================================================ # FARMACIA (VET-006) - Agregado 2026-01-07 # ============================================================================ enums_farmacia: - name: "categoria_medicamento" values: - "antibiotico" - "antiparasitario" - "analgesico" - "antiinflamatorio" - "vacuna" - "vitamina" - "dermatologico" - "oftalmico" - "cardiaco" - "digestivo" - "otro" - name: "tipo_movimiento_farmacia" values: - "entrada" - "salida" - "ajuste_positivo" - "ajuste_negativo" - "devolucion" - "merma" - name: "fraccion_controlada" values: - "no_controlado" - "fraccion_i" - "fraccion_ii" - "fraccion_iii" - "fraccion_iv" tablas_farmacia: - name: "medicamentos" descripcion: "Catalogo de medicamentos veterinarios" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "codigo: VARCHAR(50)" - "nombre: VARCHAR(150)" - "nombre_comercial: VARCHAR(150)" - "principio_activo: VARCHAR(200)" - "categoria: veterinaria.categoria_medicamento" - "presentacion: VARCHAR(100)" - "concentracion: VARCHAR(50)" - "contenido: VARCHAR(50)" - "laboratorio: VARCHAR(100)" - "requiere_receta: BOOLEAN" - "controlado: BOOLEAN" - "fraccion_controlada: veterinaria.fraccion_controlada" - "stock_minimo: INTEGER" - "stock_actual: INTEGER" - "precio_compra: NUMERIC(10,2)" - "precio_venta: NUMERIC(10,2)" - "especies_aplicables: UUID[]" - "active: BOOLEAN" indices: - "idx_medicamentos_tenant" - "idx_medicamentos_codigo" - "idx_medicamentos_nombre" - "idx_medicamentos_categoria" - "idx_medicamentos_controlado" - "idx_medicamentos_stock_bajo" - name: "medicamentos_lotes" descripcion: "Lotes de medicamentos con control de caducidad" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "medicamento_id: UUID FK" - "numero_lote: VARCHAR(50)" - "fecha_caducidad: DATE" - "cantidad_inicial: INTEGER" - "cantidad_actual: INTEGER" - "precio_compra: NUMERIC(10,2)" - "factura_compra: VARCHAR(50)" - "proveedor: VARCHAR(100)" - "fecha_recepcion: DATE" - "bloqueado: BOOLEAN" - "motivo_bloqueo: TEXT" indices: - "idx_lotes_tenant" - "idx_lotes_medicamento" - "idx_lotes_caducidad" - "idx_lotes_numero" - "idx_lotes_proximos_caducar" - name: "dispensaciones" descripcion: "Registro de dispensacion de medicamentos" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "medicamento_id: UUID FK" - "lote_id: UUID FK" - "mascota_id: UUID FK" - "veterinario_id: UUID FK" - "receta_id: UUID FK" - "consultation_id: UUID FK" - "cantidad: INTEGER" - "fecha_dispensacion: TIMESTAMPTZ" - "dosis: VARCHAR(100)" - "duracion_tratamiento: VARCHAR(50)" - "instrucciones: TEXT" - "dispensado_por: UUID FK" - "notas: TEXT" indices: - "idx_dispensaciones_tenant" - "idx_dispensaciones_medicamento" - "idx_dispensaciones_mascota" - "idx_dispensaciones_fecha" - "idx_dispensaciones_veterinario" - name: "movimientos_farmacia" descripcion: "Kardex de movimientos de inventario de farmacia" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "medicamento_id: UUID FK" - "lote_id: UUID FK" - "tipo: veterinaria.tipo_movimiento_farmacia" - "cantidad: INTEGER" - "stock_anterior: INTEGER" - "stock_posterior: INTEGER" - "referencia_tipo: VARCHAR(50)" - "referencia_id: UUID" - "motivo: TEXT" - "documento: VARCHAR(100)" - "usuario_id: UUID FK" indices: - "idx_movimientos_tenant" - "idx_movimientos_medicamento" - "idx_movimientos_fecha" - name: "bitacora_controlados" descripcion: "Bitacora de medicamentos controlados (COFEPRIS)" rls: true columnas: - "id: UUID PK" - "tenant_id: UUID FK" - "medicamento_id: UUID FK" - "lote_id: UUID FK" - "dispensacion_id: UUID FK" - "tipo_movimiento: veterinaria.tipo_movimiento_farmacia" - "cantidad: INTEGER" - "mascota_id: UUID FK" - "propietario_nombre: VARCHAR(200)" - "receta_id: UUID FK" - "veterinario_id: UUID FK" - "veterinario_cedula: VARCHAR(50)" - "justificacion: TEXT" - "diagnostico: TEXT" - "fecha_registro: TIMESTAMPTZ" - "registrado_por: UUID FK" - "ip_address: VARCHAR(45)" indices: - "idx_bitacora_tenant" - "idx_bitacora_medicamento" - "idx_bitacora_fecha" funciones_farmacia: - name: "get_lotes_proximos_caducar(tenant_id, dias)" descripcion: "Obtiene lotes que caducaran en los proximos N dias" - name: "get_medicamentos_stock_bajo(tenant_id)" descripcion: "Obtiene medicamentos con stock igual o menor al minimo" - name: "seleccionar_lote_fefo(medicamento_id, cantidad)" descripcion: "Selecciona el lote con fecha de caducidad mas proxima (FEFO)" triggers_farmacia: - name: "trg_actualizar_stock" tabla: "medicamentos_lotes" descripcion: "Actualiza stock_actual en medicamentos cuando cambian los lotes" - name: "trg_registrar_dispensacion" tabla: "dispensaciones" descripcion: "Registra movimiento y bitacora al dispensar medicamentos" resumen: total_enums: 5 total_catalogos: 3 total_tablas: 12 total_con_rls: 15 total_funciones: 3 total_triggers: 2 archivos_ddl: - "database/schemas/01-veterinaria-schema-ddl.sql" - "database/schemas/02-veterinaria-farmacia-ddl.sql" archivos_seeds: - "database/seeds/fase8/01-veterinaria-catalogos.sql" ultima_actualizacion: "2026-01-07" actualizado_por: "Orquestador Workspace (Sprint 9)"