clinica-veterinaria/orchestration/inventarios/DATABASE_INVENTORY.yml
rckrdmrd c461208a51 [SPRINT-7] docs: Agregar documentacion, schemas y reportes
- Epicas documentadas
- Schema de farmacia veterinaria
- Inventario de base de datos
- Reporte de ejecucion Sprint 7

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-10 08:53:42 -06:00

444 lines
12 KiB
YAML

---
# 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)"