[MIGRATION-V2] feat: Migrar clinica-veterinaria a estructura v2
- Prefijo v2: CVT - TRACEABILITY-MASTER.yml creado - Listo para integracion como submodulo Workspace: v2.0.0 | SIMCO: v4.0.0
This commit is contained in:
commit
53da75ddc7
271
.env.example
Normal file
271
.env.example
Normal file
@ -0,0 +1,271 @@
|
||||
# =============================================================================
|
||||
# .env.example - CLINICA VETERINARIA
|
||||
# =============================================================================
|
||||
# Copia este archivo a .env y configura los valores
|
||||
# Generado por: @PERFIL_DEVENV
|
||||
# Referencia: orchestration/environment/ENVIRONMENT-INVENTORY.yml
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# APLICACION
|
||||
# =============================================================================
|
||||
NODE_ENV=development
|
||||
APP_NAME=clinica-veterinaria
|
||||
APP_VERSION=1.0.0
|
||||
|
||||
# =============================================================================
|
||||
# PUERTOS - Asignados por DEVENV-PORTS-INVENTORY.yml
|
||||
# =============================================================================
|
||||
FRONTEND_PORT=3120
|
||||
BACKEND_PORT=3121
|
||||
|
||||
# Alias para compatibilidad
|
||||
PORT=3121
|
||||
|
||||
# =============================================================================
|
||||
# BASE DE DATOS - PostgreSQL
|
||||
# =============================================================================
|
||||
# Desarrollo: Puerto 5440 (asignado en DEVENV-PORTS-INVENTORY.yml)
|
||||
# Produccion: Puerto 5432 (estandar)
|
||||
# =============================================================================
|
||||
|
||||
DB_HOST=localhost
|
||||
DB_PORT=5440
|
||||
DB_NAME=clinica_veterinaria_dev
|
||||
DB_USER=veterinaria_dev
|
||||
|
||||
# IMPORTANTE: Generar password seguro con: openssl rand -base64 32
|
||||
DB_PASSWORD=CAMBIAR_POR_PASSWORD_SEGURO
|
||||
|
||||
# Connection string completo (calculado de las variables anteriores)
|
||||
DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}
|
||||
|
||||
# Pool de conexiones
|
||||
DB_POOL_SIZE=10
|
||||
DB_CONNECTION_TIMEOUT=5000
|
||||
|
||||
# SSL (false para desarrollo, true para produccion)
|
||||
DB_SSL=false
|
||||
|
||||
# =============================================================================
|
||||
# BASE DE DATOS - Ambientes adicionales
|
||||
# =============================================================================
|
||||
# Test (mismo servidor, diferente BD)
|
||||
# DB_NAME_TEST=clinica_veterinaria_test
|
||||
|
||||
# Staging (servidor externo)
|
||||
# DB_HOST_STAGING=staging-db.example.com
|
||||
# DB_NAME_STAGING=clinica_veterinaria_staging
|
||||
# DB_USER_STAGING=veterinaria_staging
|
||||
|
||||
# Produccion (servidor externo)
|
||||
# DB_HOST_PROD=prod-db.example.com
|
||||
# DB_NAME_PROD=clinica_veterinaria_prod
|
||||
# DB_USER_PROD=veterinaria_prod
|
||||
|
||||
# =============================================================================
|
||||
# REDIS - Cache y Sesiones
|
||||
# =============================================================================
|
||||
# Desarrollo: Puerto 6387 (asignado en DEVENV-PORTS-INVENTORY.yml)
|
||||
# Produccion: Puerto 6379 (estandar)
|
||||
# =============================================================================
|
||||
|
||||
REDIS_HOST=localhost
|
||||
REDIS_PORT=6387
|
||||
REDIS_DB=0
|
||||
|
||||
# Password (vacio para desarrollo, requerido en produccion)
|
||||
REDIS_PASSWORD=
|
||||
|
||||
# Connection string
|
||||
REDIS_URL=redis://${REDIS_HOST}:${REDIS_PORT}/${REDIS_DB}
|
||||
|
||||
# Configuracion de cache
|
||||
REDIS_CACHE_TTL=3600
|
||||
REDIS_MAX_MEMORY=128mb
|
||||
|
||||
# =============================================================================
|
||||
# AUTENTICACION - JWT
|
||||
# =============================================================================
|
||||
# IMPORTANTE: Generar secreto seguro con: openssl rand -base64 64
|
||||
# Minimo 32 caracteres requeridos
|
||||
# =============================================================================
|
||||
|
||||
JWT_SECRET=CAMBIAR_POR_SECRETO_SEGURO_DE_AL_MENOS_32_CARACTERES
|
||||
|
||||
# Tiempos de expiracion
|
||||
JWT_EXPIRES_IN=24h
|
||||
JWT_REFRESH_EXPIRES_IN=7d
|
||||
|
||||
# Algoritmo (default: HS256)
|
||||
JWT_ALGORITHM=HS256
|
||||
|
||||
# =============================================================================
|
||||
# CORS - Cross-Origin Resource Sharing
|
||||
# =============================================================================
|
||||
|
||||
FRONTEND_URL=http://localhost:3120
|
||||
|
||||
# Multiples origenes separados por coma
|
||||
ALLOWED_ORIGINS=http://localhost:3120,http://localhost:3121
|
||||
|
||||
# Metodos permitidos
|
||||
CORS_METHODS=GET,POST,PUT,PATCH,DELETE,OPTIONS
|
||||
|
||||
# Headers permitidos
|
||||
CORS_HEADERS=Content-Type,Authorization,X-Requested-With
|
||||
|
||||
# =============================================================================
|
||||
# LOGGING
|
||||
# =============================================================================
|
||||
|
||||
# Niveles: debug, info, warn, error
|
||||
LOG_LEVEL=debug
|
||||
|
||||
# Formatos: pretty (desarrollo), json (produccion)
|
||||
LOG_FORMAT=pretty
|
||||
|
||||
# Archivo de logs (opcional)
|
||||
# LOG_FILE=./logs/app.log
|
||||
|
||||
# Rotacion de logs
|
||||
# LOG_MAX_SIZE=10m
|
||||
# LOG_MAX_FILES=5
|
||||
|
||||
# =============================================================================
|
||||
# ALMACENAMIENTO DE ARCHIVOS
|
||||
# =============================================================================
|
||||
|
||||
# Tipo: local, s3, minio
|
||||
STORAGE_TYPE=local
|
||||
|
||||
# Path local (para desarrollo)
|
||||
STORAGE_PATH=./uploads
|
||||
|
||||
# Tamano maximo de archivo (10MB en bytes)
|
||||
MAX_FILE_SIZE=10485760
|
||||
|
||||
# Tipos permitidos
|
||||
ALLOWED_FILE_TYPES=image/jpeg,image/png,application/pdf
|
||||
|
||||
# =============================================================================
|
||||
# AWS S3 (para produccion)
|
||||
# =============================================================================
|
||||
|
||||
# AWS_ACCESS_KEY_ID=
|
||||
# AWS_SECRET_ACCESS_KEY=
|
||||
# AWS_REGION=us-east-1
|
||||
# AWS_S3_BUCKET=clinica-veterinaria-uploads
|
||||
|
||||
# =============================================================================
|
||||
# EMAIL - SMTP
|
||||
# =============================================================================
|
||||
# MailHog para desarrollo: puerto 1025
|
||||
# Servidor real para produccion
|
||||
# =============================================================================
|
||||
|
||||
SMTP_HOST=localhost
|
||||
SMTP_PORT=1025
|
||||
SMTP_SECURE=false
|
||||
|
||||
# Credenciales (para produccion)
|
||||
# SMTP_USER=
|
||||
# SMTP_PASSWORD=
|
||||
|
||||
# Remitente por defecto
|
||||
SMTP_FROM_NAME=Clinica Veterinaria
|
||||
SMTP_FROM_EMAIL=noreply@clinica-vet.local
|
||||
|
||||
# =============================================================================
|
||||
# SEGURIDAD ADICIONAL
|
||||
# =============================================================================
|
||||
|
||||
# Rate limiting
|
||||
RATE_LIMIT_WINDOW=900000
|
||||
RATE_LIMIT_MAX=100
|
||||
|
||||
# Helmet (headers de seguridad)
|
||||
HELMET_ENABLED=true
|
||||
|
||||
# CSRF Protection
|
||||
CSRF_ENABLED=false
|
||||
|
||||
# Throttle por IP
|
||||
THROTTLE_TTL=60
|
||||
THROTTLE_LIMIT=10
|
||||
|
||||
# =============================================================================
|
||||
# MONITOREO Y METRICAS
|
||||
# =============================================================================
|
||||
|
||||
# Health check endpoint
|
||||
HEALTH_CHECK_ENABLED=true
|
||||
|
||||
# Metricas Prometheus (opcional)
|
||||
# METRICS_ENABLED=false
|
||||
# METRICS_PORT=9090
|
||||
|
||||
# Sentry (opcional)
|
||||
# SENTRY_DSN=
|
||||
|
||||
# =============================================================================
|
||||
# CONFIGURACION ESPECIFICA VETERINARIA
|
||||
# =============================================================================
|
||||
|
||||
# Recordatorios de vacunacion (dias antes)
|
||||
VACCINATION_REMINDER_DAYS=7
|
||||
|
||||
# Intervalo de monitoreo hospitalizacion (minutos)
|
||||
HOSPITALIZATION_MONITOR_INTERVAL=30
|
||||
|
||||
# Formatos de chip aceptados
|
||||
CHIP_FORMATS=ISO11784,ISO11785,FDXA,FDXB
|
||||
|
||||
# =============================================================================
|
||||
# DESARROLLO Y DEBUG
|
||||
# =============================================================================
|
||||
|
||||
# Habilitar debug de TypeORM
|
||||
# TYPEORM_LOGGING=true
|
||||
|
||||
# Swagger UI
|
||||
SWAGGER_ENABLED=true
|
||||
SWAGGER_TITLE=Clinica Veterinaria API
|
||||
SWAGGER_VERSION=1.0.0
|
||||
|
||||
# Hot reload
|
||||
HOT_RELOAD=true
|
||||
|
||||
# =============================================================================
|
||||
# PRODUCCION
|
||||
# =============================================================================
|
||||
# Estas variables deben configurarse via secrets manager en produccion:
|
||||
#
|
||||
# - DB_PASSWORD (secreto)
|
||||
# - JWT_SECRET (secreto)
|
||||
# - REDIS_PASSWORD (secreto)
|
||||
# - AWS_ACCESS_KEY_ID (si usa S3)
|
||||
# - AWS_SECRET_ACCESS_KEY (si usa S3)
|
||||
# - SMTP_USER (si usa email)
|
||||
# - SMTP_PASSWORD (si usa email)
|
||||
# - SENTRY_DSN (si usa Sentry)
|
||||
#
|
||||
# Diferencias de configuracion en produccion:
|
||||
# - NODE_ENV=production
|
||||
# - LOG_LEVEL=info
|
||||
# - LOG_FORMAT=json
|
||||
# - DB_PORT=5432 (estandar)
|
||||
# - DB_SSL=true
|
||||
# - REDIS_PORT=6379 (estandar)
|
||||
# - STORAGE_TYPE=s3
|
||||
# - SWAGGER_ENABLED=false
|
||||
# - HOT_RELOAD=false
|
||||
# =============================================================================
|
||||
|
||||
# =============================================================================
|
||||
# REFERENCIAS
|
||||
# =============================================================================
|
||||
# Inventario de entorno: orchestration/environment/ENVIRONMENT-INVENTORY.yml
|
||||
# Inventario de puertos: orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml
|
||||
# Perfil DevEnv: orchestration/agents/perfiles/PERFIL-DEVENV.md
|
||||
# =============================================================================
|
||||
20
.env.ports
Normal file
20
.env.ports
Normal file
@ -0,0 +1,20 @@
|
||||
# =============================================================================
|
||||
# .env.ports - CLINICA VETERINARIA
|
||||
# =============================================================================
|
||||
# Archivo de referencia de puertos asignados
|
||||
# Generado por: @PERFIL_DEVENV
|
||||
# =============================================================================
|
||||
|
||||
# Servicios principales
|
||||
FRONTEND_PORT=3120
|
||||
BACKEND_PORT=3121
|
||||
|
||||
# Base de datos
|
||||
DB_PORT=5440
|
||||
|
||||
# Redis
|
||||
REDIS_PORT=6387
|
||||
|
||||
# =============================================================================
|
||||
# Referencia: DEVENV-PORTS-INVENTORY.yml
|
||||
# =============================================================================
|
||||
82
README.md
Normal file
82
README.md
Normal file
@ -0,0 +1,82 @@
|
||||
# Clinica Veterinaria - ERP Especializado
|
||||
|
||||
**Version:** 0.1.0
|
||||
**Estado:** Desarrollo
|
||||
**Tipo:** VERTICAL (erp-clinicas)
|
||||
**Sistema:** SIMCO + NEXUS v3.4
|
||||
|
||||
---
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion integral para clinicas veterinarias. Vertical especializada basada en erp-clinicas.
|
||||
|
||||
### Funcionalidades Principales
|
||||
|
||||
- Gestion de mascotas (pacientes) con datos completos
|
||||
- Consultas veterinarias: diagnosticos y tratamientos
|
||||
- Cartilla de vacunacion y desparasitacion
|
||||
- Control de hospitalizacion
|
||||
- Servicios de estetica canina/felina
|
||||
- Farmacia veterinaria e inventario
|
||||
- Facturacion de servicios y productos
|
||||
|
||||
---
|
||||
|
||||
## Stack Tecnologico
|
||||
|
||||
| Capa | Tecnologia |
|
||||
|------|------------|
|
||||
| Database | PostgreSQL 16+ con RLS |
|
||||
| Backend | (pendiente) Express.js / NestJS |
|
||||
| Frontend | (pendiente) React + Vite |
|
||||
|
||||
---
|
||||
|
||||
## Estructura del Proyecto
|
||||
|
||||
```
|
||||
clinica-veterinaria/
|
||||
├── database/
|
||||
│ ├── schemas/ # DDL especifico veterinaria
|
||||
│ └── seeds/ # Datos iniciales
|
||||
├── docs/
|
||||
│ └── 00-vision-general/
|
||||
├── orchestration/
|
||||
│ ├── 00-guidelines/
|
||||
│ ├── environment/
|
||||
│ ├── inventarios/
|
||||
│ └── trazas/
|
||||
└── README.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Herencia
|
||||
|
||||
Este proyecto hereda de:
|
||||
- **erp-clinicas** (modulos base de clinicas)
|
||||
- **erp-core** (modulos genericos ERP)
|
||||
|
||||
---
|
||||
|
||||
## Inicio Rapido
|
||||
|
||||
```bash
|
||||
# Database (requiere PostgreSQL y erp-clinicas cargado)
|
||||
psql -d erp_clinicas -f database/schemas/01-veterinaria-schema-ddl.sql
|
||||
psql -d erp_clinicas -f database/seeds/fase8/01-veterinaria-catalogos.sql
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
- Contexto: `orchestration/00-guidelines/CONTEXTO-PROYECTO.md`
|
||||
- Herencia: `orchestration/00-guidelines/HERENCIA-ERP-CLINICAS.md`
|
||||
- Inventario: `orchestration/inventarios/MASTER_INVENTORY.yml`
|
||||
|
||||
---
|
||||
|
||||
**Creado:** 2026-01-04
|
||||
**Actualizado:** 2026-01-07
|
||||
387
database/schemas/01-veterinaria-schema-ddl.sql
Normal file
387
database/schemas/01-veterinaria-schema-ddl.sql
Normal file
@ -0,0 +1,387 @@
|
||||
-- ============================================================================
|
||||
-- VETERINARIA SCHEMA - Especialización de ERP-Clínicas
|
||||
-- Clínica Veterinaria
|
||||
-- ============================================================================
|
||||
-- Fecha: 2026-01-04
|
||||
-- Versión: 1.0
|
||||
-- Hereda de: erp-clinicas FASE-8
|
||||
-- ============================================================================
|
||||
|
||||
-- Schema
|
||||
CREATE SCHEMA IF NOT EXISTS veterinaria;
|
||||
|
||||
-- ============================================================================
|
||||
-- ENUMS
|
||||
-- ============================================================================
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE veterinaria.sexo_animal AS ENUM ('macho', 'hembra', 'desconocido');
|
||||
EXCEPTION WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE veterinaria.estado_hospitalizacion AS ENUM (
|
||||
'ingresado', 'en_tratamiento', 'estable', 'critico', 'alta', 'fallecido'
|
||||
);
|
||||
EXCEPTION WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- CATÁLOGOS
|
||||
-- ============================================================================
|
||||
|
||||
-- Especies
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.especies (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
nombre VARCHAR(50) NOT NULL,
|
||||
nombre_cientifico VARCHAR(100),
|
||||
descripcion TEXT,
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.especies IS 'Catálogo de especies animales';
|
||||
|
||||
-- Razas
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.razas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
especie_id UUID NOT NULL REFERENCES veterinaria.especies(id) ON DELETE CASCADE,
|
||||
nombre VARCHAR(100) NOT NULL,
|
||||
descripcion TEXT,
|
||||
tamanio_promedio VARCHAR(20), -- 'pequeño', 'mediano', 'grande', 'gigante'
|
||||
peso_promedio_kg NUMERIC(5,2),
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.razas IS 'Catálogo de razas por especie';
|
||||
|
||||
-- Vacunas
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.vacunas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
nombre VARCHAR(100) NOT NULL,
|
||||
descripcion TEXT,
|
||||
especie_id UUID REFERENCES veterinaria.especies(id),
|
||||
laboratorio VARCHAR(100),
|
||||
dosis_ml NUMERIC(5,2),
|
||||
intervalo_refuerzo_dias INTEGER,
|
||||
es_obligatoria BOOLEAN DEFAULT false,
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.vacunas IS 'Catálogo de vacunas veterinarias';
|
||||
|
||||
-- ============================================================================
|
||||
-- TABLAS PRINCIPALES
|
||||
-- ============================================================================
|
||||
|
||||
-- Propietarios (dueños de mascotas)
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.propietarios (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
partner_id UUID, -- Referencia opcional a core.partners
|
||||
nombre VARCHAR(100) NOT NULL,
|
||||
apellidos VARCHAR(100),
|
||||
telefono VARCHAR(20),
|
||||
telefono_emergencia VARCHAR(20),
|
||||
email VARCHAR(100),
|
||||
direccion TEXT,
|
||||
rfc VARCHAR(13),
|
||||
-- Control
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.propietarios IS 'Propietarios/dueños de mascotas';
|
||||
|
||||
-- Mascotas (pacientes)
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.mascotas (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
propietario_id UUID NOT NULL REFERENCES veterinaria.propietarios(id),
|
||||
especie_id UUID NOT NULL REFERENCES veterinaria.especies(id),
|
||||
raza_id UUID REFERENCES veterinaria.razas(id),
|
||||
-- Datos básicos
|
||||
nombre VARCHAR(100) NOT NULL,
|
||||
sexo veterinaria.sexo_animal DEFAULT 'desconocido',
|
||||
fecha_nacimiento DATE,
|
||||
edad_aproximada VARCHAR(50), -- "3 años", "6 meses"
|
||||
color VARCHAR(50),
|
||||
peso_kg NUMERIC(6,2),
|
||||
-- Identificación
|
||||
numero_chip VARCHAR(50),
|
||||
tiene_chip BOOLEAN DEFAULT false,
|
||||
-- Estado
|
||||
esterilizado BOOLEAN DEFAULT false,
|
||||
fecha_esterilizacion DATE,
|
||||
-- Notas
|
||||
alergias TEXT,
|
||||
condiciones_especiales TEXT,
|
||||
notas TEXT,
|
||||
-- Foto
|
||||
foto_url VARCHAR(255),
|
||||
-- Control
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.mascotas IS 'Mascotas/pacientes de la clínica veterinaria';
|
||||
|
||||
-- Cartilla de vacunación
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.cartilla_vacunacion (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
mascota_id UUID NOT NULL REFERENCES veterinaria.mascotas(id) ON DELETE CASCADE,
|
||||
vacuna_id UUID NOT NULL REFERENCES veterinaria.vacunas(id),
|
||||
veterinario_id UUID, -- Referencia a clinica.doctors
|
||||
-- Datos de aplicación
|
||||
fecha_aplicacion DATE NOT NULL,
|
||||
fecha_proximo_refuerzo DATE,
|
||||
lote VARCHAR(50),
|
||||
laboratorio VARCHAR(100),
|
||||
-- Notas
|
||||
observaciones TEXT,
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.cartilla_vacunacion IS 'Historial de vacunación de mascotas';
|
||||
|
||||
-- Desparasitaciones
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.desparasitaciones (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
mascota_id UUID NOT NULL REFERENCES veterinaria.mascotas(id) ON DELETE CASCADE,
|
||||
veterinario_id UUID,
|
||||
-- Datos
|
||||
tipo VARCHAR(50) NOT NULL, -- 'interna', 'externa', 'ambas'
|
||||
producto VARCHAR(100) NOT NULL,
|
||||
dosis VARCHAR(50),
|
||||
via_administracion VARCHAR(50),
|
||||
fecha_aplicacion DATE NOT NULL,
|
||||
fecha_proxima DATE,
|
||||
-- Notas
|
||||
observaciones TEXT,
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.desparasitaciones IS 'Historial de desparasitaciones';
|
||||
|
||||
-- Hospitalización
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.hospitalizacion (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
mascota_id UUID NOT NULL REFERENCES veterinaria.mascotas(id),
|
||||
veterinario_id UUID,
|
||||
consultation_id UUID, -- Referencia a clinica.consultations
|
||||
-- Datos de ingreso
|
||||
fecha_ingreso TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
motivo_ingreso TEXT NOT NULL,
|
||||
diagnostico_ingreso TEXT,
|
||||
-- Ubicación
|
||||
area VARCHAR(50), -- 'jaula_pequena', 'jaula_grande', 'quirofano', 'uci'
|
||||
numero_jaula VARCHAR(20),
|
||||
-- Estado
|
||||
estado veterinaria.estado_hospitalizacion DEFAULT 'ingresado',
|
||||
-- Alta
|
||||
fecha_alta TIMESTAMPTZ,
|
||||
diagnostico_alta TEXT,
|
||||
instrucciones_alta TEXT,
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.hospitalizacion IS 'Registro de hospitalizaciones';
|
||||
|
||||
-- Monitoreo de hospitalización
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.hospitalizacion_monitoreo (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
hospitalizacion_id UUID NOT NULL REFERENCES veterinaria.hospitalizacion(id) ON DELETE CASCADE,
|
||||
-- Signos vitales
|
||||
fecha_hora TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
peso_kg NUMERIC(6,2),
|
||||
temperatura NUMERIC(4,1),
|
||||
frecuencia_cardiaca INTEGER,
|
||||
frecuencia_respiratoria INTEGER,
|
||||
-- Alimentación
|
||||
comio BOOLEAN,
|
||||
bebio_agua BOOLEAN,
|
||||
-- Eliminación
|
||||
orino BOOLEAN,
|
||||
defeco BOOLEAN,
|
||||
consistencia_heces VARCHAR(50),
|
||||
-- Estado
|
||||
estado_animo VARCHAR(50),
|
||||
nivel_dolor INTEGER CHECK (nivel_dolor BETWEEN 0 AND 10),
|
||||
-- Notas
|
||||
observaciones TEXT,
|
||||
registrado_por UUID, -- employee_id
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.hospitalizacion_monitoreo IS 'Monitoreo durante hospitalización';
|
||||
|
||||
-- Servicios de estética
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.estetica (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
mascota_id UUID NOT NULL REFERENCES veterinaria.mascotas(id),
|
||||
estilista_id UUID, -- employee_id
|
||||
-- Servicios
|
||||
fecha_servicio TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
servicios TEXT[], -- ['baño', 'corte', 'limpieza_oidos', 'corte_unas']
|
||||
tipo_corte VARCHAR(50),
|
||||
shampoo_usado VARCHAR(100),
|
||||
-- Estado
|
||||
estado VARCHAR(20) DEFAULT 'pendiente', -- 'pendiente', 'en_proceso', 'terminado'
|
||||
hora_inicio TIME,
|
||||
hora_fin TIME,
|
||||
-- Notas
|
||||
observaciones TEXT,
|
||||
observaciones_piel TEXT,
|
||||
-- Precio
|
||||
precio NUMERIC(10,2),
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.estetica IS 'Servicios de estética/grooming';
|
||||
|
||||
-- ============================================================================
|
||||
-- EXTENSIONES A TABLAS DE ERP-CLINICAS
|
||||
-- ============================================================================
|
||||
|
||||
-- Extensión a clinica.consultations (si existe)
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (SELECT 1 FROM information_schema.tables
|
||||
WHERE table_schema = 'clinica' AND table_name = 'consultations') THEN
|
||||
|
||||
-- mascota_id
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'clinica' AND table_name = 'consultations'
|
||||
AND column_name = 'mascota_id') THEN
|
||||
ALTER TABLE clinica.consultations ADD COLUMN mascota_id UUID
|
||||
REFERENCES veterinaria.mascotas(id);
|
||||
END IF;
|
||||
|
||||
-- peso_actual
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'clinica' AND table_name = 'consultations'
|
||||
AND column_name = 'peso_actual') THEN
|
||||
ALTER TABLE clinica.consultations ADD COLUMN peso_actual NUMERIC(6,2);
|
||||
END IF;
|
||||
|
||||
-- temperatura
|
||||
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
|
||||
WHERE table_schema = 'clinica' AND table_name = 'consultations'
|
||||
AND column_name = 'temperatura') THEN
|
||||
ALTER TABLE clinica.consultations ADD COLUMN temperatura NUMERIC(4,1);
|
||||
END IF;
|
||||
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- ÍNDICES
|
||||
-- ============================================================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_especies_tenant ON veterinaria.especies(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_razas_tenant ON veterinaria.razas(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_razas_especie ON veterinaria.razas(especie_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_vacunas_tenant ON veterinaria.vacunas(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_vacunas_especie ON veterinaria.vacunas(especie_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_propietarios_tenant ON veterinaria.propietarios(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_propietarios_telefono ON veterinaria.propietarios(telefono);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_mascotas_tenant ON veterinaria.mascotas(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_mascotas_propietario ON veterinaria.mascotas(propietario_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_mascotas_especie ON veterinaria.mascotas(especie_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_mascotas_chip ON veterinaria.mascotas(numero_chip) WHERE numero_chip IS NOT NULL;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_cartilla_tenant ON veterinaria.cartilla_vacunacion(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_cartilla_mascota ON veterinaria.cartilla_vacunacion(mascota_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_cartilla_fecha ON veterinaria.cartilla_vacunacion(fecha_proximo_refuerzo);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_desparasitaciones_tenant ON veterinaria.desparasitaciones(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_desparasitaciones_mascota ON veterinaria.desparasitaciones(mascota_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_hospitalizacion_tenant ON veterinaria.hospitalizacion(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_hospitalizacion_mascota ON veterinaria.hospitalizacion(mascota_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_hospitalizacion_estado ON veterinaria.hospitalizacion(tenant_id, estado);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_hospitalizacion_monitoreo_hosp ON veterinaria.hospitalizacion_monitoreo(hospitalizacion_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_estetica_tenant ON veterinaria.estetica(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_estetica_mascota ON veterinaria.estetica(mascota_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_estetica_fecha ON veterinaria.estetica(fecha_servicio);
|
||||
|
||||
-- ============================================================================
|
||||
-- RLS
|
||||
-- ============================================================================
|
||||
|
||||
ALTER TABLE veterinaria.especies ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.razas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.vacunas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.propietarios ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.mascotas ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.cartilla_vacunacion ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.desparasitaciones ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.hospitalizacion ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.hospitalizacion_monitoreo ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.estetica ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_especies ON veterinaria.especies;
|
||||
CREATE POLICY tenant_isolation_especies ON veterinaria.especies
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_razas ON veterinaria.razas;
|
||||
CREATE POLICY tenant_isolation_razas ON veterinaria.razas
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_vacunas ON veterinaria.vacunas;
|
||||
CREATE POLICY tenant_isolation_vacunas ON veterinaria.vacunas
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_propietarios ON veterinaria.propietarios;
|
||||
CREATE POLICY tenant_isolation_propietarios ON veterinaria.propietarios
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_mascotas ON veterinaria.mascotas;
|
||||
CREATE POLICY tenant_isolation_mascotas ON veterinaria.mascotas
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_cartilla ON veterinaria.cartilla_vacunacion;
|
||||
CREATE POLICY tenant_isolation_cartilla ON veterinaria.cartilla_vacunacion
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_desparasitaciones ON veterinaria.desparasitaciones;
|
||||
CREATE POLICY tenant_isolation_desparasitaciones ON veterinaria.desparasitaciones
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_hospitalizacion ON veterinaria.hospitalizacion;
|
||||
CREATE POLICY tenant_isolation_hospitalizacion ON veterinaria.hospitalizacion
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_hosp_monitoreo ON veterinaria.hospitalizacion_monitoreo;
|
||||
CREATE POLICY tenant_isolation_hosp_monitoreo ON veterinaria.hospitalizacion_monitoreo
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_estetica ON veterinaria.estetica;
|
||||
CREATE POLICY tenant_isolation_estetica ON veterinaria.estetica
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
-- ============================================================================
|
||||
-- FIN VETERINARIA SCHEMA
|
||||
-- ============================================================================
|
||||
464
database/schemas/02-veterinaria-farmacia-ddl.sql
Normal file
464
database/schemas/02-veterinaria-farmacia-ddl.sql
Normal file
@ -0,0 +1,464 @@
|
||||
-- ============================================================================
|
||||
-- VETERINARIA SCHEMA - Farmacia (VET-006)
|
||||
-- Sistema de gestion de farmacia veterinaria
|
||||
-- ============================================================================
|
||||
-- Fecha: 2026-01-07
|
||||
-- Version: 1.0
|
||||
-- Basado en: VET-006-farmacia.md
|
||||
-- ============================================================================
|
||||
|
||||
-- ============================================================================
|
||||
-- ENUMS
|
||||
-- ============================================================================
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE veterinaria.categoria_medicamento AS ENUM (
|
||||
'antibiotico',
|
||||
'antiparasitario',
|
||||
'analgesico',
|
||||
'antiinflamatorio',
|
||||
'vacuna',
|
||||
'vitamina',
|
||||
'dermatologico',
|
||||
'oftalmico',
|
||||
'cardiaco',
|
||||
'digestivo',
|
||||
'otro'
|
||||
);
|
||||
EXCEPTION WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE veterinaria.tipo_movimiento_farmacia AS ENUM (
|
||||
'entrada',
|
||||
'salida',
|
||||
'ajuste_positivo',
|
||||
'ajuste_negativo',
|
||||
'devolucion',
|
||||
'merma'
|
||||
);
|
||||
EXCEPTION WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
|
||||
DO $$ BEGIN
|
||||
CREATE TYPE veterinaria.fraccion_controlada AS ENUM (
|
||||
'no_controlado',
|
||||
'fraccion_i',
|
||||
'fraccion_ii',
|
||||
'fraccion_iii',
|
||||
'fraccion_iv'
|
||||
);
|
||||
EXCEPTION WHEN duplicate_object THEN NULL;
|
||||
END $$;
|
||||
|
||||
-- ============================================================================
|
||||
-- TABLAS PRINCIPALES
|
||||
-- ============================================================================
|
||||
|
||||
-- Catalogo de medicamentos
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.medicamentos (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
-- Identificacion
|
||||
codigo VARCHAR(50),
|
||||
nombre VARCHAR(150) NOT NULL,
|
||||
nombre_comercial VARCHAR(150),
|
||||
principio_activo VARCHAR(200),
|
||||
-- Clasificacion
|
||||
categoria veterinaria.categoria_medicamento DEFAULT 'otro',
|
||||
-- Presentacion
|
||||
presentacion VARCHAR(100), -- 'tabletas', 'inyectable', 'suspension', etc.
|
||||
concentracion VARCHAR(50), -- '500mg', '100mg/ml'
|
||||
contenido VARCHAR(50), -- '30 tabletas', '100ml'
|
||||
-- Fabricante
|
||||
laboratorio VARCHAR(100),
|
||||
-- Control
|
||||
requiere_receta BOOLEAN DEFAULT false,
|
||||
controlado BOOLEAN DEFAULT false,
|
||||
fraccion_controlada veterinaria.fraccion_controlada DEFAULT 'no_controlado',
|
||||
-- Stock
|
||||
stock_minimo INTEGER DEFAULT 10,
|
||||
stock_actual INTEGER DEFAULT 0,
|
||||
-- Precios
|
||||
precio_compra NUMERIC(10,2),
|
||||
precio_venta NUMERIC(10,2),
|
||||
-- Especies aplicables (NULL = todas)
|
||||
especies_aplicables UUID[], -- Array de especie_id
|
||||
-- Estado
|
||||
active BOOLEAN DEFAULT true,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.medicamentos IS 'Catalogo de medicamentos veterinarios';
|
||||
|
||||
-- Lotes de medicamentos (control de caducidad)
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.medicamentos_lotes (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
medicamento_id UUID NOT NULL REFERENCES veterinaria.medicamentos(id) ON DELETE CASCADE,
|
||||
-- Lote
|
||||
numero_lote VARCHAR(50) NOT NULL,
|
||||
fecha_caducidad DATE NOT NULL,
|
||||
-- Cantidades
|
||||
cantidad_inicial INTEGER NOT NULL,
|
||||
cantidad_actual INTEGER NOT NULL,
|
||||
-- Compra
|
||||
precio_compra NUMERIC(10,2),
|
||||
factura_compra VARCHAR(50),
|
||||
proveedor VARCHAR(100),
|
||||
fecha_recepcion DATE DEFAULT CURRENT_DATE,
|
||||
-- Estado
|
||||
bloqueado BOOLEAN DEFAULT false, -- Bloquear si esta vencido
|
||||
motivo_bloqueo TEXT,
|
||||
-- Control
|
||||
created_at TIMESTAMPTZ DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.medicamentos_lotes IS 'Lotes de medicamentos con control de caducidad';
|
||||
|
||||
-- Dispensaciones de medicamentos
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.dispensaciones (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
-- Referencias
|
||||
medicamento_id UUID NOT NULL REFERENCES veterinaria.medicamentos(id),
|
||||
lote_id UUID NOT NULL REFERENCES veterinaria.medicamentos_lotes(id),
|
||||
mascota_id UUID REFERENCES veterinaria.mascotas(id),
|
||||
veterinario_id UUID, -- Referencia a clinica.doctors
|
||||
receta_id UUID, -- Referencia a clinica.prescriptions si existe
|
||||
consultation_id UUID, -- Referencia a clinica.consultations
|
||||
-- Dispensacion
|
||||
cantidad INTEGER NOT NULL,
|
||||
fecha_dispensacion TIMESTAMPTZ DEFAULT NOW(),
|
||||
-- Instrucciones
|
||||
dosis VARCHAR(100), -- '1 tableta cada 8 horas'
|
||||
duracion_tratamiento VARCHAR(50), -- '7 dias'
|
||||
instrucciones TEXT,
|
||||
-- Control
|
||||
dispensado_por UUID, -- employee_id
|
||||
notas TEXT,
|
||||
-- Auditoria
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.dispensaciones IS 'Registro de dispensacion de medicamentos';
|
||||
|
||||
-- Movimientos de inventario (kardex)
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.movimientos_farmacia (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
medicamento_id UUID NOT NULL REFERENCES veterinaria.medicamentos(id),
|
||||
lote_id UUID REFERENCES veterinaria.medicamentos_lotes(id),
|
||||
-- Movimiento
|
||||
tipo veterinaria.tipo_movimiento_farmacia NOT NULL,
|
||||
cantidad INTEGER NOT NULL,
|
||||
stock_anterior INTEGER NOT NULL,
|
||||
stock_posterior INTEGER NOT NULL,
|
||||
-- Referencia
|
||||
referencia_tipo VARCHAR(50), -- 'dispensacion', 'compra', 'ajuste'
|
||||
referencia_id UUID,
|
||||
-- Detalles
|
||||
motivo TEXT,
|
||||
documento VARCHAR(100), -- Factura, nota, etc.
|
||||
-- Auditoria
|
||||
usuario_id UUID,
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.movimientos_farmacia IS 'Kardex de movimientos de inventario de farmacia';
|
||||
|
||||
-- Bitacora de medicamentos controlados
|
||||
CREATE TABLE IF NOT EXISTS veterinaria.bitacora_controlados (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
tenant_id UUID NOT NULL,
|
||||
medicamento_id UUID NOT NULL REFERENCES veterinaria.medicamentos(id),
|
||||
lote_id UUID REFERENCES veterinaria.medicamentos_lotes(id),
|
||||
dispensacion_id UUID REFERENCES veterinaria.dispensaciones(id),
|
||||
-- Movimiento
|
||||
tipo_movimiento veterinaria.tipo_movimiento_farmacia NOT NULL,
|
||||
cantidad INTEGER NOT NULL,
|
||||
-- Paciente
|
||||
mascota_id UUID REFERENCES veterinaria.mascotas(id),
|
||||
propietario_nombre VARCHAR(200), -- Snapshot del nombre
|
||||
-- Prescripcion
|
||||
receta_id UUID,
|
||||
veterinario_id UUID,
|
||||
veterinario_cedula VARCHAR(50),
|
||||
-- Justificacion
|
||||
justificacion TEXT NOT NULL,
|
||||
diagnostico TEXT,
|
||||
-- Auditoria
|
||||
fecha_registro TIMESTAMPTZ DEFAULT NOW(),
|
||||
registrado_por UUID NOT NULL,
|
||||
ip_address VARCHAR(45),
|
||||
created_at TIMESTAMPTZ DEFAULT NOW()
|
||||
);
|
||||
|
||||
COMMENT ON TABLE veterinaria.bitacora_controlados IS 'Bitacora de movimientos de medicamentos controlados (requerido por COFEPRIS)';
|
||||
|
||||
-- ============================================================================
|
||||
-- INDICES
|
||||
-- ============================================================================
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_tenant ON veterinaria.medicamentos(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_codigo ON veterinaria.medicamentos(tenant_id, codigo);
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_nombre ON veterinaria.medicamentos(tenant_id, nombre);
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_categoria ON veterinaria.medicamentos(tenant_id, categoria);
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_controlado ON veterinaria.medicamentos(tenant_id, controlado) WHERE controlado = true;
|
||||
CREATE INDEX IF NOT EXISTS idx_medicamentos_stock_bajo ON veterinaria.medicamentos(tenant_id)
|
||||
WHERE stock_actual <= stock_minimo;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_lotes_tenant ON veterinaria.medicamentos_lotes(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_lotes_medicamento ON veterinaria.medicamentos_lotes(medicamento_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_lotes_caducidad ON veterinaria.medicamentos_lotes(fecha_caducidad);
|
||||
CREATE INDEX IF NOT EXISTS idx_lotes_numero ON veterinaria.medicamentos_lotes(tenant_id, numero_lote);
|
||||
CREATE INDEX IF NOT EXISTS idx_lotes_proximos_caducar ON veterinaria.medicamentos_lotes(tenant_id, fecha_caducidad)
|
||||
WHERE cantidad_actual > 0 AND bloqueado = false;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_dispensaciones_tenant ON veterinaria.dispensaciones(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_dispensaciones_medicamento ON veterinaria.dispensaciones(medicamento_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_dispensaciones_mascota ON veterinaria.dispensaciones(mascota_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_dispensaciones_fecha ON veterinaria.dispensaciones(fecha_dispensacion);
|
||||
CREATE INDEX IF NOT EXISTS idx_dispensaciones_veterinario ON veterinaria.dispensaciones(veterinario_id);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_movimientos_tenant ON veterinaria.movimientos_farmacia(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_movimientos_medicamento ON veterinaria.movimientos_farmacia(medicamento_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_movimientos_fecha ON veterinaria.movimientos_farmacia(created_at);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_bitacora_tenant ON veterinaria.bitacora_controlados(tenant_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_bitacora_medicamento ON veterinaria.bitacora_controlados(medicamento_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_bitacora_fecha ON veterinaria.bitacora_controlados(fecha_registro);
|
||||
|
||||
-- ============================================================================
|
||||
-- RLS
|
||||
-- ============================================================================
|
||||
|
||||
ALTER TABLE veterinaria.medicamentos ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.medicamentos_lotes ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.dispensaciones ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.movimientos_farmacia ENABLE ROW LEVEL SECURITY;
|
||||
ALTER TABLE veterinaria.bitacora_controlados ENABLE ROW LEVEL SECURITY;
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_medicamentos ON veterinaria.medicamentos;
|
||||
CREATE POLICY tenant_isolation_medicamentos ON veterinaria.medicamentos
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_lotes ON veterinaria.medicamentos_lotes;
|
||||
CREATE POLICY tenant_isolation_lotes ON veterinaria.medicamentos_lotes
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_dispensaciones ON veterinaria.dispensaciones;
|
||||
CREATE POLICY tenant_isolation_dispensaciones ON veterinaria.dispensaciones
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_movimientos ON veterinaria.movimientos_farmacia;
|
||||
CREATE POLICY tenant_isolation_movimientos ON veterinaria.movimientos_farmacia
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
DROP POLICY IF EXISTS tenant_isolation_bitacora ON veterinaria.bitacora_controlados;
|
||||
CREATE POLICY tenant_isolation_bitacora ON veterinaria.bitacora_controlados
|
||||
USING (tenant_id = current_setting('app.current_tenant_id', true)::UUID);
|
||||
|
||||
-- ============================================================================
|
||||
-- TRIGGERS
|
||||
-- ============================================================================
|
||||
|
||||
-- Trigger para actualizar stock_actual en medicamentos
|
||||
CREATE OR REPLACE FUNCTION veterinaria.actualizar_stock_medicamento()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
IF TG_OP = 'INSERT' THEN
|
||||
-- Actualizar stock del medicamento
|
||||
UPDATE veterinaria.medicamentos
|
||||
SET stock_actual = stock_actual + NEW.cantidad_inicial,
|
||||
updated_at = NOW()
|
||||
WHERE id = NEW.medicamento_id;
|
||||
ELSIF TG_OP = 'UPDATE' THEN
|
||||
-- Si cambia cantidad_actual
|
||||
UPDATE veterinaria.medicamentos
|
||||
SET stock_actual = (
|
||||
SELECT COALESCE(SUM(cantidad_actual), 0)
|
||||
FROM veterinaria.medicamentos_lotes
|
||||
WHERE medicamento_id = NEW.medicamento_id
|
||||
AND bloqueado = false
|
||||
),
|
||||
updated_at = NOW()
|
||||
WHERE id = NEW.medicamento_id;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_actualizar_stock ON veterinaria.medicamentos_lotes;
|
||||
CREATE TRIGGER trg_actualizar_stock
|
||||
AFTER INSERT OR UPDATE OF cantidad_actual ON veterinaria.medicamentos_lotes
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION veterinaria.actualizar_stock_medicamento();
|
||||
|
||||
COMMENT ON FUNCTION veterinaria.actualizar_stock_medicamento() IS 'Actualiza stock_actual en medicamentos cuando cambian los lotes';
|
||||
|
||||
-- Trigger para registrar movimiento en dispensacion
|
||||
CREATE OR REPLACE FUNCTION veterinaria.registrar_movimiento_dispensacion()
|
||||
RETURNS TRIGGER AS $$
|
||||
DECLARE
|
||||
v_stock_anterior INTEGER;
|
||||
BEGIN
|
||||
-- Obtener stock anterior
|
||||
SELECT stock_actual INTO v_stock_anterior
|
||||
FROM veterinaria.medicamentos
|
||||
WHERE id = NEW.medicamento_id;
|
||||
|
||||
-- Descontar del lote
|
||||
UPDATE veterinaria.medicamentos_lotes
|
||||
SET cantidad_actual = cantidad_actual - NEW.cantidad,
|
||||
updated_at = NOW()
|
||||
WHERE id = NEW.lote_id;
|
||||
|
||||
-- Registrar movimiento
|
||||
INSERT INTO veterinaria.movimientos_farmacia (
|
||||
tenant_id, medicamento_id, lote_id,
|
||||
tipo, cantidad, stock_anterior, stock_posterior,
|
||||
referencia_tipo, referencia_id, usuario_id
|
||||
) VALUES (
|
||||
NEW.tenant_id, NEW.medicamento_id, NEW.lote_id,
|
||||
'salida', NEW.cantidad, v_stock_anterior, v_stock_anterior - NEW.cantidad,
|
||||
'dispensacion', NEW.id, NEW.dispensado_por
|
||||
);
|
||||
|
||||
-- Si es controlado, registrar en bitacora
|
||||
IF EXISTS (
|
||||
SELECT 1 FROM veterinaria.medicamentos
|
||||
WHERE id = NEW.medicamento_id AND controlado = true
|
||||
) THEN
|
||||
INSERT INTO veterinaria.bitacora_controlados (
|
||||
tenant_id, medicamento_id, lote_id, dispensacion_id,
|
||||
tipo_movimiento, cantidad, mascota_id,
|
||||
propietario_nombre, receta_id, veterinario_id,
|
||||
justificacion, registrado_por
|
||||
)
|
||||
SELECT
|
||||
NEW.tenant_id, NEW.medicamento_id, NEW.lote_id, NEW.id,
|
||||
'salida', NEW.cantidad, NEW.mascota_id,
|
||||
CONCAT(p.nombre, ' ', COALESCE(p.apellidos, '')),
|
||||
NEW.receta_id, NEW.veterinario_id,
|
||||
COALESCE(NEW.notas, 'Dispensacion de medicamento'),
|
||||
NEW.dispensado_por
|
||||
FROM veterinaria.mascotas m
|
||||
JOIN veterinaria.propietarios p ON m.propietario_id = p.id
|
||||
WHERE m.id = NEW.mascota_id;
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
DROP TRIGGER IF EXISTS trg_registrar_dispensacion ON veterinaria.dispensaciones;
|
||||
CREATE TRIGGER trg_registrar_dispensacion
|
||||
AFTER INSERT ON veterinaria.dispensaciones
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION veterinaria.registrar_movimiento_dispensacion();
|
||||
|
||||
COMMENT ON FUNCTION veterinaria.registrar_movimiento_dispensacion() IS 'Registra movimiento y bitacora al dispensar medicamentos';
|
||||
|
||||
-- ============================================================================
|
||||
-- FUNCIONES DE CONSULTA
|
||||
-- ============================================================================
|
||||
|
||||
-- Funcion para obtener lotes proximos a caducar
|
||||
CREATE OR REPLACE FUNCTION veterinaria.get_lotes_proximos_caducar(
|
||||
p_tenant_id UUID,
|
||||
p_dias INTEGER DEFAULT 30
|
||||
)
|
||||
RETURNS TABLE (
|
||||
lote_id UUID,
|
||||
medicamento_id UUID,
|
||||
medicamento_nombre VARCHAR,
|
||||
numero_lote VARCHAR,
|
||||
fecha_caducidad DATE,
|
||||
dias_restantes INTEGER,
|
||||
cantidad_actual INTEGER
|
||||
) AS $$
|
||||
BEGIN
|
||||
RETURN QUERY
|
||||
SELECT
|
||||
l.id AS lote_id,
|
||||
m.id AS medicamento_id,
|
||||
m.nombre AS medicamento_nombre,
|
||||
l.numero_lote,
|
||||
l.fecha_caducidad,
|
||||
(l.fecha_caducidad - CURRENT_DATE)::INTEGER AS dias_restantes,
|
||||
l.cantidad_actual
|
||||
FROM veterinaria.medicamentos_lotes l
|
||||
JOIN veterinaria.medicamentos m ON l.medicamento_id = m.id
|
||||
WHERE l.tenant_id = p_tenant_id
|
||||
AND l.cantidad_actual > 0
|
||||
AND l.bloqueado = false
|
||||
AND l.fecha_caducidad <= CURRENT_DATE + p_dias
|
||||
ORDER BY l.fecha_caducidad ASC;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
COMMENT ON FUNCTION veterinaria.get_lotes_proximos_caducar(UUID, INTEGER) IS 'Obtiene lotes que caducaran en los proximos N dias';
|
||||
|
||||
-- Funcion para obtener medicamentos con stock bajo
|
||||
CREATE OR REPLACE FUNCTION veterinaria.get_medicamentos_stock_bajo(p_tenant_id UUID)
|
||||
RETURNS TABLE (
|
||||
medicamento_id UUID,
|
||||
codigo VARCHAR,
|
||||
nombre VARCHAR,
|
||||
stock_actual INTEGER,
|
||||
stock_minimo INTEGER,
|
||||
diferencia INTEGER
|
||||
) AS $$
|
||||
BEGIN
|
||||
RETURN QUERY
|
||||
SELECT
|
||||
m.id AS medicamento_id,
|
||||
m.codigo,
|
||||
m.nombre,
|
||||
m.stock_actual,
|
||||
m.stock_minimo,
|
||||
(m.stock_minimo - m.stock_actual) AS diferencia
|
||||
FROM veterinaria.medicamentos m
|
||||
WHERE m.tenant_id = p_tenant_id
|
||||
AND m.active = true
|
||||
AND m.stock_actual <= m.stock_minimo
|
||||
ORDER BY diferencia DESC;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
COMMENT ON FUNCTION veterinaria.get_medicamentos_stock_bajo(UUID) IS 'Obtiene medicamentos con stock igual o menor al minimo';
|
||||
|
||||
-- Funcion para seleccionar lote FEFO (First Expired, First Out)
|
||||
CREATE OR REPLACE FUNCTION veterinaria.seleccionar_lote_fefo(
|
||||
p_medicamento_id UUID,
|
||||
p_cantidad INTEGER
|
||||
)
|
||||
RETURNS UUID AS $$
|
||||
DECLARE
|
||||
v_lote_id UUID;
|
||||
BEGIN
|
||||
SELECT id INTO v_lote_id
|
||||
FROM veterinaria.medicamentos_lotes
|
||||
WHERE medicamento_id = p_medicamento_id
|
||||
AND cantidad_actual >= p_cantidad
|
||||
AND bloqueado = false
|
||||
AND fecha_caducidad > CURRENT_DATE
|
||||
ORDER BY fecha_caducidad ASC
|
||||
LIMIT 1;
|
||||
|
||||
IF v_lote_id IS NULL THEN
|
||||
RAISE EXCEPTION 'No hay lotes disponibles con stock suficiente para el medicamento %', p_medicamento_id;
|
||||
END IF;
|
||||
|
||||
RETURN v_lote_id;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
COMMENT ON FUNCTION veterinaria.seleccionar_lote_fefo(UUID, INTEGER) IS 'Selecciona el lote con fecha de caducidad mas proxima (FEFO)';
|
||||
|
||||
-- ============================================================================
|
||||
-- FIN VETERINARIA FARMACIA SCHEMA
|
||||
-- ============================================================================
|
||||
146
database/seeds/fase8/01-veterinaria-catalogos.sql
Normal file
146
database/seeds/fase8/01-veterinaria-catalogos.sql
Normal file
@ -0,0 +1,146 @@
|
||||
-- ============================================================================
|
||||
-- SEED DATA: Catálogos de Veterinaria
|
||||
-- Especialización de ERP-Clínicas
|
||||
-- ============================================================================
|
||||
-- NOTA: Ejecutar después de SET app.current_tenant_id = 'UUID-DEL-TENANT';
|
||||
-- ============================================================================
|
||||
|
||||
-- Especies
|
||||
INSERT INTO veterinaria.especies (tenant_id, nombre, nombre_cientifico)
|
||||
SELECT current_setting('app.current_tenant_id', true)::UUID, nombre, nombre_cientifico
|
||||
FROM (VALUES
|
||||
('Perro', 'Canis lupus familiaris'),
|
||||
('Gato', 'Felis silvestris catus'),
|
||||
('Ave', NULL),
|
||||
('Reptil', NULL),
|
||||
('Roedor', NULL),
|
||||
('Conejo', 'Oryctolagus cuniculus'),
|
||||
('Pez', NULL),
|
||||
('Hurón', 'Mustela putorius furo'),
|
||||
('Otro', NULL)
|
||||
) AS t(nombre, nombre_cientifico)
|
||||
WHERE current_setting('app.current_tenant_id', true) IS NOT NULL
|
||||
AND current_setting('app.current_tenant_id', true) != ''
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Razas de perro
|
||||
INSERT INTO veterinaria.razas (tenant_id, especie_id, nombre, tamanio_promedio, peso_promedio_kg)
|
||||
SELECT
|
||||
current_setting('app.current_tenant_id', true)::UUID,
|
||||
e.id,
|
||||
r.nombre,
|
||||
r.tamanio,
|
||||
r.peso
|
||||
FROM veterinaria.especies e
|
||||
CROSS JOIN (VALUES
|
||||
('Mestizo', 'mediano', 15.0),
|
||||
('Chihuahua', 'pequeño', 2.5),
|
||||
('Poodle', 'pequeño', 5.0),
|
||||
('Bulldog Francés', 'pequeño', 12.0),
|
||||
('Beagle', 'mediano', 12.0),
|
||||
('Labrador Retriever', 'grande', 30.0),
|
||||
('Golden Retriever', 'grande', 32.0),
|
||||
('Pastor Alemán', 'grande', 35.0),
|
||||
('Rottweiler', 'grande', 45.0),
|
||||
('Husky Siberiano', 'grande', 25.0),
|
||||
('Pug', 'pequeño', 8.0),
|
||||
('Yorkshire Terrier', 'pequeño', 3.0),
|
||||
('Schnauzer', 'mediano', 7.0),
|
||||
('Boxer', 'grande', 30.0),
|
||||
('Pitbull', 'mediano', 25.0)
|
||||
) AS r(nombre, tamanio, peso)
|
||||
WHERE e.nombre = 'Perro'
|
||||
AND e.tenant_id = current_setting('app.current_tenant_id', true)::UUID
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Razas de gato
|
||||
INSERT INTO veterinaria.razas (tenant_id, especie_id, nombre, tamanio_promedio, peso_promedio_kg)
|
||||
SELECT
|
||||
current_setting('app.current_tenant_id', true)::UUID,
|
||||
e.id,
|
||||
r.nombre,
|
||||
r.tamanio,
|
||||
r.peso
|
||||
FROM veterinaria.especies e
|
||||
CROSS JOIN (VALUES
|
||||
('Mestizo', 'mediano', 4.0),
|
||||
('Siamés', 'mediano', 4.5),
|
||||
('Persa', 'mediano', 5.0),
|
||||
('Maine Coon', 'grande', 8.0),
|
||||
('Bengalí', 'mediano', 5.5),
|
||||
('Ragdoll', 'grande', 7.0),
|
||||
('British Shorthair', 'mediano', 6.0),
|
||||
('Angora', 'mediano', 4.5),
|
||||
('Sphynx', 'mediano', 4.0),
|
||||
('Abisinio', 'mediano', 4.0)
|
||||
) AS r(nombre, tamanio, peso)
|
||||
WHERE e.nombre = 'Gato'
|
||||
AND e.tenant_id = current_setting('app.current_tenant_id', true)::UUID
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Vacunas para perros
|
||||
INSERT INTO veterinaria.vacunas (tenant_id, especie_id, nombre, descripcion, intervalo_refuerzo_dias, es_obligatoria)
|
||||
SELECT
|
||||
current_setting('app.current_tenant_id', true)::UUID,
|
||||
e.id,
|
||||
v.nombre,
|
||||
v.descripcion,
|
||||
v.intervalo,
|
||||
v.obligatoria
|
||||
FROM veterinaria.especies e
|
||||
CROSS JOIN (VALUES
|
||||
('Parvovirus', 'Protege contra parvovirus canino', 365, false),
|
||||
('Moquillo', 'Protege contra distemper canino', 365, false),
|
||||
('Hepatitis', 'Protege contra hepatitis infecciosa canina', 365, false),
|
||||
('Rabia', 'Vacuna antirrábica - OBLIGATORIA', 365, true),
|
||||
('Leptospirosis', 'Protege contra leptospirosis', 365, false),
|
||||
('Bordetella', 'Protege contra tos de las perreras', 180, false),
|
||||
('Cuádruple', 'Moquillo, Hepatitis, Parvo, Parainfluenza', 365, false),
|
||||
('Séxtuple', 'Cuádruple + Coronavirus + Leptospira', 365, false)
|
||||
) AS v(nombre, descripcion, intervalo, obligatoria)
|
||||
WHERE e.nombre = 'Perro'
|
||||
AND e.tenant_id = current_setting('app.current_tenant_id', true)::UUID
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Vacunas para gatos
|
||||
INSERT INTO veterinaria.vacunas (tenant_id, especie_id, nombre, descripcion, intervalo_refuerzo_dias, es_obligatoria)
|
||||
SELECT
|
||||
current_setting('app.current_tenant_id', true)::UUID,
|
||||
e.id,
|
||||
v.nombre,
|
||||
v.descripcion,
|
||||
v.intervalo,
|
||||
v.obligatoria
|
||||
FROM veterinaria.especies e
|
||||
CROSS JOIN (VALUES
|
||||
('Triple Felina', 'Rinotraqueitis, Calicivirus, Panleucopenia', 365, false),
|
||||
('Leucemia Felina', 'Protege contra FeLV', 365, false),
|
||||
('Rabia', 'Vacuna antirrábica', 365, true),
|
||||
('PIF', 'Peritonitis Infecciosa Felina', 365, false)
|
||||
) AS v(nombre, descripcion, intervalo, obligatoria)
|
||||
WHERE e.nombre = 'Gato'
|
||||
AND e.tenant_id = current_setting('app.current_tenant_id', true)::UUID
|
||||
ON CONFLICT DO NOTHING;
|
||||
|
||||
-- Skills específicos veterinarios
|
||||
INSERT INTO hr.skills (tenant_id, skill_type_id, name, requiere_cedula)
|
||||
SELECT
|
||||
current_setting('app.current_tenant_id', true)::UUID,
|
||||
st.id,
|
||||
unnest(ARRAY[
|
||||
'Medicina Veterinaria General',
|
||||
'Cirugía Veterinaria',
|
||||
'Dermatología Veterinaria',
|
||||
'Cardiología Veterinaria',
|
||||
'Oftalmología Veterinaria',
|
||||
'Ortopedia Veterinaria',
|
||||
'Oncología Veterinaria',
|
||||
'Medicina de Exóticos',
|
||||
'Anestesiología Veterinaria',
|
||||
'Imagenología Veterinaria'
|
||||
]),
|
||||
true
|
||||
FROM hr.skill_types st
|
||||
WHERE st.name = 'Especialidad Médica'
|
||||
AND st.tenant_id = current_setting('app.current_tenant_id', true)::UUID
|
||||
ON CONFLICT DO NOTHING;
|
||||
53
docs/00-vision-general/README.md
Normal file
53
docs/00-vision-general/README.md
Normal file
@ -0,0 +1,53 @@
|
||||
# Vision General - Clinica Veterinaria
|
||||
|
||||
## Proposito
|
||||
|
||||
Sistema de gestion integral para clinicas veterinarias que permite:
|
||||
|
||||
1. **Gestion de Pacientes (Mascotas)**
|
||||
- Registro completo de animales
|
||||
- Vinculacion con propietarios
|
||||
- Historial medico completo
|
||||
|
||||
2. **Consultas Veterinarias**
|
||||
- Registro de signos vitales
|
||||
- Diagnosticos y tratamientos
|
||||
- Prescripcion de medicamentos
|
||||
|
||||
3. **Control Sanitario**
|
||||
- Cartilla de vacunacion
|
||||
- Calendario de desparasitacion
|
||||
- Recordatorios automaticos
|
||||
|
||||
4. **Servicios Adicionales**
|
||||
- Hospitalizacion
|
||||
- Estetica canina/felina
|
||||
- Farmacia veterinaria
|
||||
|
||||
## Usuarios
|
||||
|
||||
| Rol | Acceso |
|
||||
|-----|--------|
|
||||
| Veterinario | Consultas, diagnosticos, prescripciones |
|
||||
| Auxiliar | Apoyo en consultas, hospitalizacion |
|
||||
| Recepcionista | Citas, cobros |
|
||||
| Estilista | Servicios de grooming |
|
||||
| Administrador | Gestion completa |
|
||||
|
||||
## Alcance
|
||||
|
||||
- **Incluido:** Gestion clinica, mascotas, vacunas, hospitalizacion, facturacion
|
||||
- **Excluido:** Contabilidad avanzada (usa erp-core), nomina
|
||||
|
||||
## Especies Soportadas
|
||||
|
||||
- Caninos (perros)
|
||||
- Felinos (gatos)
|
||||
- Aves
|
||||
- Roedores
|
||||
- Reptiles
|
||||
- Exoticos
|
||||
|
||||
## Referencias
|
||||
|
||||
Ver `orchestration/00-guidelines/CONTEXTO-PROYECTO.md` para detalles completos del negocio.
|
||||
392
docs/00-vision-general/VISION.md
Normal file
392
docs/00-vision-general/VISION.md
Normal file
@ -0,0 +1,392 @@
|
||||
# VISION - Sistema de Gestion Clinica Veterinaria
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Version:** 1.0.0
|
||||
**Fecha:** 2026-01-07
|
||||
**Estado:** Fase 0 - Documentacion
|
||||
|
||||
---
|
||||
|
||||
## 1. PROPOSITO
|
||||
|
||||
Sistema de gestion integral para clinicas veterinarias que permite administrar mascotas (pacientes), propietarios, expedientes clinicos, cartilla de vacunacion, hospitalizacion, farmacia veterinaria y servicios de estetica.
|
||||
|
||||
### Problema que Resuelve
|
||||
|
||||
- Falta de registro digitalizado de mascotas y sus propietarios
|
||||
- Control manual de esquemas de vacunacion por especie
|
||||
- Seguimiento deficiente de pacientes hospitalizados
|
||||
- Gestion inadecuada de inventario de medicamentos veterinarios
|
||||
- Dificultad para cumplir reportes a SENASICA
|
||||
|
||||
### Propuesta de Valor
|
||||
|
||||
- **Registro multi-especie** con catalogos especializados por tipo de animal
|
||||
- **Cartilla de vacunacion digital** con recordatorios automaticos
|
||||
- **Control de hospitalizacion** con monitoreo de signos vitales
|
||||
- **Farmacia integrada** con control de lotes y caducidades
|
||||
- **Reportes SENASICA** para cumplimiento normativo
|
||||
|
||||
---
|
||||
|
||||
## 2. OBJETIVOS PRINCIPALES
|
||||
|
||||
### O1: Gestion de Mascotas y Propietarios
|
||||
- Registro completo de datos de la mascota
|
||||
- Vinculacion con propietario(s)
|
||||
- Historial clinico por mascota
|
||||
- Microchip y documentacion
|
||||
|
||||
### O2: Cartilla de Vacunacion
|
||||
- Esquemas de vacunacion por especie
|
||||
- Control de aplicaciones con lote y fecha
|
||||
- Alertas de proximas vacunas
|
||||
- Certificados digitales
|
||||
|
||||
### O3: Consultas Veterinarias
|
||||
- Registro de signos vitales (peso, temperatura)
|
||||
- Diagnosticos y tratamientos
|
||||
- Recetas veterinarias
|
||||
- Estudios de laboratorio
|
||||
|
||||
### O4: Hospitalizacion
|
||||
- Ingreso y asignacion de espacios
|
||||
- Monitoreo continuo
|
||||
- Administracion de medicamentos
|
||||
- Alta y seguimiento
|
||||
|
||||
### O5: Farmacia y Estetica
|
||||
- Inventario de medicamentos veterinarios
|
||||
- Control de lotes y caducidades
|
||||
- Servicios de grooming
|
||||
- Ventas de productos
|
||||
|
||||
---
|
||||
|
||||
## 3. USUARIOS Y ROLES
|
||||
|
||||
| Rol | Descripcion | Permisos Principales |
|
||||
|-----|-------------|---------------------|
|
||||
| **Veterinario** | Medico tratante | Consultas, diagnosticos, prescripciones, cirugias |
|
||||
| **Auxiliar Veterinario** | Apoyo clinico | Ver expedientes, hospitalización, administrar medicamentos |
|
||||
| **Recepcionista** | Atencion al cliente | Agendar citas, cobros, registro de mascotas |
|
||||
| **Estilista** | Servicios grooming | Banos, cortes, tratamientos esteticos |
|
||||
| **Farmaceutico** | Control de medicamentos | Inventario, dispensacion, control de lotes |
|
||||
| **Administrador** | Gestion general | Configuracion, reportes, usuarios |
|
||||
|
||||
---
|
||||
|
||||
## 4. FUNCIONALIDADES CORE
|
||||
|
||||
### 4.1 Modulo Mascotas (Pacientes)
|
||||
|
||||
```yaml
|
||||
entidad_principal: mascota
|
||||
campos:
|
||||
- id: UUID
|
||||
- nombre: VARCHAR(100)
|
||||
- especie_id: UUID (FK)
|
||||
- raza_id: UUID (FK)
|
||||
- sexo: ENUM (macho, hembra)
|
||||
- fecha_nacimiento: DATE
|
||||
- peso_actual: DECIMAL(6,2)
|
||||
- color: VARCHAR(100)
|
||||
- microchip: VARCHAR(50) UNIQUE
|
||||
- esterilizado: BOOLEAN
|
||||
- fecha_esterilizacion: DATE
|
||||
- propietario_id: UUID (FK)
|
||||
- foto_url: VARCHAR(500)
|
||||
- notas: TEXT
|
||||
- estado: ENUM (activo, fallecido, perdido, dado_de_baja)
|
||||
|
||||
funcionalidades:
|
||||
- Registro con foto
|
||||
- Busqueda por microchip
|
||||
- Historial de pesos
|
||||
- Vinculacion de multiples propietarios
|
||||
- QR para acceso rapido a expediente
|
||||
```
|
||||
|
||||
### 4.2 Modulo Propietarios
|
||||
|
||||
```yaml
|
||||
entidad_principal: propietario
|
||||
campos:
|
||||
- id: UUID
|
||||
- nombre: VARCHAR(200)
|
||||
- telefono: VARCHAR(20)
|
||||
- telefono_emergencia: VARCHAR(20)
|
||||
- email: VARCHAR(255)
|
||||
- direccion: TEXT
|
||||
- codigo_postal: VARCHAR(10)
|
||||
- rfc: VARCHAR(13)
|
||||
- notas: TEXT
|
||||
|
||||
funcionalidades:
|
||||
- Multiples mascotas por propietario
|
||||
- Historial de visitas
|
||||
- Preferencias de comunicacion
|
||||
- Saldo a favor / adeudos
|
||||
```
|
||||
|
||||
### 4.3 Modulo Vacunacion
|
||||
|
||||
```yaml
|
||||
entidad_principal: vacunacion
|
||||
campos:
|
||||
- id: UUID
|
||||
- mascota_id: UUID (FK)
|
||||
- vacuna_id: UUID (FK catalogo)
|
||||
- fecha_aplicacion: DATE
|
||||
- fecha_proxima: DATE
|
||||
- lote: VARCHAR(50)
|
||||
- fabricante: VARCHAR(100)
|
||||
- veterinario_id: UUID (FK)
|
||||
- certificado_url: VARCHAR(500)
|
||||
- notas: TEXT
|
||||
|
||||
funcionalidades:
|
||||
- Esquemas automaticos por especie/edad
|
||||
- Alertas de proximas vacunas (email, SMS, push)
|
||||
- Generacion de certificados
|
||||
- Reporte para SENASICA
|
||||
```
|
||||
|
||||
### 4.4 Modulo Hospitalizacion
|
||||
|
||||
```yaml
|
||||
entidad_principal: hospitalizacion
|
||||
campos:
|
||||
- id: UUID
|
||||
- mascota_id: UUID (FK)
|
||||
- fecha_ingreso: TIMESTAMP
|
||||
- fecha_alta: TIMESTAMP
|
||||
- motivo: TEXT
|
||||
- espacio_id: UUID (FK jaulas/kennels)
|
||||
- estado: ENUM (activo, alta, fallecido, referido)
|
||||
- dieta: TEXT
|
||||
- indicaciones: TEXT
|
||||
- veterinario_responsable_id: UUID (FK)
|
||||
|
||||
funcionalidades:
|
||||
- Asignacion de espacios (jaulas, kennels)
|
||||
- Monitoreo de signos vitales cada X horas
|
||||
- Administracion de medicamentos
|
||||
- Notas de evolucion
|
||||
- Comunicacion con propietario
|
||||
- Costos acumulados
|
||||
```
|
||||
|
||||
### 4.5 Modulo Farmacia
|
||||
|
||||
```yaml
|
||||
entidad_principal: medicamento
|
||||
campos:
|
||||
- id: UUID
|
||||
- nombre: VARCHAR(200)
|
||||
- principio_activo: VARCHAR(200)
|
||||
- presentacion: VARCHAR(100)
|
||||
- laboratorio: VARCHAR(100)
|
||||
- requiere_receta: BOOLEAN
|
||||
- controlado: BOOLEAN
|
||||
- stock_actual: INTEGER
|
||||
- stock_minimo: INTEGER
|
||||
- precio_compra: DECIMAL
|
||||
- precio_venta: DECIMAL
|
||||
|
||||
lote:
|
||||
- id: UUID
|
||||
- medicamento_id: UUID (FK)
|
||||
- numero_lote: VARCHAR(50)
|
||||
- fecha_caducidad: DATE
|
||||
- cantidad_inicial: INTEGER
|
||||
- cantidad_actual: INTEGER
|
||||
|
||||
funcionalidades:
|
||||
- Control de existencias por lote
|
||||
- Alertas de caducidad proxima
|
||||
- Alertas de stock minimo
|
||||
- Trazabilidad de dispensacion
|
||||
- Medicamentos controlados
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. ESPECIES SOPORTADAS
|
||||
|
||||
### Principales
|
||||
|
||||
| Especie | Codigo | Vacunas Requeridas |
|
||||
|---------|--------|-------------------|
|
||||
| Canino (Perro) | CAN | Parvovirus, Moquillo, Hepatitis, Rabia, Leptospirosis, Bordetella |
|
||||
| Felino (Gato) | FEL | Triple Felina, Leucemia Felina, Rabia |
|
||||
|
||||
### Otras Especies
|
||||
|
||||
| Especie | Codigo | Notas |
|
||||
|---------|--------|-------|
|
||||
| Ave | AVE | Paramixovirus, Viruela aviar (segun tipo) |
|
||||
| Reptil | REP | Sin vacunas estandar, control de parasitos |
|
||||
| Roedor | ROE | Sin vacunas estandar |
|
||||
| Pez | PEZ | Sin vacunas, tratamientos de agua |
|
||||
| Exotico | EXO | Segun especie especifica |
|
||||
|
||||
### Esquemas de Vacunacion por Especie
|
||||
|
||||
#### Caninos
|
||||
```yaml
|
||||
cachorro:
|
||||
- 6_semanas: Parvovirus
|
||||
- 8_semanas: Quintuple (Parvovirus, Moquillo, Hepatitis, Parainfluenza, Leptospirosis)
|
||||
- 12_semanas: Refuerzo Quintuple
|
||||
- 16_semanas: Rabia
|
||||
- anual: Refuerzos + Rabia
|
||||
|
||||
adulto:
|
||||
- anual: Quintuple + Rabia
|
||||
- cada_6_meses: Bordetella (opcional, perros sociales)
|
||||
```
|
||||
|
||||
#### Felinos
|
||||
```yaml
|
||||
gatito:
|
||||
- 8_semanas: Triple Felina (Rinotraqueitis, Calicivirus, Panleucopenia)
|
||||
- 12_semanas: Refuerzo Triple + Leucemia Felina
|
||||
- 16_semanas: Rabia
|
||||
- anual: Refuerzos
|
||||
|
||||
adulto:
|
||||
- anual: Triple Felina + Rabia
|
||||
- leucemia: Segun riesgo (gatos de exterior)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. CONSULTA VETERINARIA
|
||||
|
||||
### Flujo de Atencion
|
||||
|
||||
```
|
||||
1. Propietario llega con mascota
|
||||
2. Recepcion verifica/registra cita
|
||||
3. Pesaje y registro de temperatura
|
||||
4. Veterinario realiza exploracion fisica
|
||||
5. Diagnostico y tratamiento
|
||||
6. Prescripcion de medicamentos
|
||||
7. Actualizacion de cartilla (si aplica vacuna)
|
||||
8. Agenda proxima cita
|
||||
9. Cobro en recepcion
|
||||
```
|
||||
|
||||
### Signos Vitales por Especie
|
||||
|
||||
| Especie | Temp Normal | FC Normal | FR Normal |
|
||||
|---------|-------------|-----------|-----------|
|
||||
| Canino | 38-39°C | 60-120 lpm | 10-30 rpm |
|
||||
| Felino | 38-39°C | 120-180 lpm | 20-40 rpm |
|
||||
| Conejo | 38.5-40°C | 130-325 lpm | 30-60 rpm |
|
||||
| Ave | 40-42°C | Variable | Variable |
|
||||
|
||||
---
|
||||
|
||||
## 7. INTEGRACIONES
|
||||
|
||||
| Sistema | Proposito | Prioridad |
|
||||
|---------|-----------|-----------|
|
||||
| SENASICA | Reportes de vacunacion antirabica | P1 |
|
||||
| Laboratorios | Resultados de analisis clinicos | P1 |
|
||||
| Proveedores | Pedidos de medicamentos | P2 |
|
||||
| Facturacion electronica | CFDI 4.0 | P1 |
|
||||
| WhatsApp/SMS | Recordatorios de citas y vacunas | P2 |
|
||||
|
||||
### SENASICA
|
||||
|
||||
```yaml
|
||||
reporte_rabico:
|
||||
frecuencia: Mensual
|
||||
datos_requeridos:
|
||||
- Numero de vacunas aplicadas
|
||||
- Especie (canino/felino)
|
||||
- Municipio
|
||||
- Veterinario responsable
|
||||
- Lote de vacuna
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. METRICAS DE EXITO
|
||||
|
||||
| Metrica | Descripcion | Objetivo |
|
||||
|---------|-------------|----------|
|
||||
| Consultas/dia | Mascotas atendidas | 15-25 |
|
||||
| Tasa vacunacion | Esquemas completos | 85% |
|
||||
| Ocupacion hospital | Uso de espacios | 70% |
|
||||
| Dias hospitalizacion | Promedio estancia | 2-3 dias |
|
||||
| Mortalidad | Fallecimientos en hospital | <5% |
|
||||
| Satisfaccion cliente | NPS | 8.5+ |
|
||||
|
||||
---
|
||||
|
||||
## 9. FASES DE DESARROLLO
|
||||
|
||||
### Fase 1: Core (MVP)
|
||||
- Registro de mascotas y propietarios
|
||||
- Consultas basicas
|
||||
- Agenda de citas
|
||||
- Facturacion simple
|
||||
|
||||
### Fase 2: Vacunacion y Farmacia
|
||||
- Cartilla de vacunacion completa
|
||||
- Inventario de medicamentos
|
||||
- Alertas automaticas
|
||||
- Control de lotes
|
||||
|
||||
### Fase 3: Hospitalizacion
|
||||
- Ingreso y espacios
|
||||
- Monitoreo de pacientes
|
||||
- Evolucion clinica
|
||||
- Costos por estancia
|
||||
|
||||
### Fase 4: Servicios Adicionales
|
||||
- Estetica (grooming)
|
||||
- Laboratorio interno
|
||||
- Tienda de productos
|
||||
- App para propietarios
|
||||
|
||||
### Fase 5: Integraciones
|
||||
- SENASICA automatizado
|
||||
- Laboratorios externos
|
||||
- Proveedores
|
||||
- Recordatorios multicanal
|
||||
|
||||
---
|
||||
|
||||
## 10. HERENCIA Y DEPENDENCIAS
|
||||
|
||||
### Hereda de erp-clinicas
|
||||
- Modulo Expedientes (adaptado a mascotas)
|
||||
- Modulo Citas
|
||||
- Modulo Consultas
|
||||
- Modulo Recetas
|
||||
|
||||
### Hereda de erp-core
|
||||
- Autenticacion y usuarios
|
||||
- Roles y permisos
|
||||
- Facturacion
|
||||
- Inventario
|
||||
- Catalogos base
|
||||
|
||||
### Especifico Veterinaria (Nuevo)
|
||||
- Mascotas (pacientes)
|
||||
- Propietarios
|
||||
- Cartilla de vacunacion
|
||||
- Hospitalizacion
|
||||
- Farmacia veterinaria
|
||||
- Estetica (grooming)
|
||||
- Integracion SENASICA
|
||||
|
||||
---
|
||||
|
||||
**Documento creado:** 2026-01-07
|
||||
**Autor:** Agente Orquestador Workspace
|
||||
**Basado en:** SIMCO v2.5, CONTEXTO-PROYECTO.md
|
||||
258
docs/01-epicas/VET-001-mascotas-propietarios.md
Normal file
258
docs/01-epicas/VET-001-mascotas-propietarios.md
Normal file
@ -0,0 +1,258 @@
|
||||
# VET-001: Mascotas y Propietarios
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-001
|
||||
- **Modulo:** Mascotas + Propietarios
|
||||
- **Prioridad:** P0
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 1 - Core
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de mascotas (pacientes) y sus propietarios: registro completo de datos del animal, vinculacion con duenos, historial de pesos, identificacion por microchip, y estado del paciente.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro completo de mascotas
|
||||
2. Vinculacion mascota-propietario
|
||||
3. Gestion multi-especie y razas
|
||||
4. Identificacion por microchip
|
||||
5. Historial de pesos
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- CRUD de propietarios
|
||||
- CRUD de mascotas con foto
|
||||
- Catalogos de especies y razas
|
||||
- Busqueda por microchip
|
||||
- Historial de pesos
|
||||
- Vinculacion de multiples propietarios
|
||||
- Estados: activo, fallecido, perdido, dado_de_baja
|
||||
|
||||
### Excluido
|
||||
- QR para expediente (fase posterior)
|
||||
- App para propietarios (fase posterior)
|
||||
- Portal de autoservicio
|
||||
|
||||
## Especies Soportadas
|
||||
|
||||
| Especie | Codigo | Vacunas Tipicas |
|
||||
|---------|--------|-----------------|
|
||||
| Canino (Perro) | CAN | Parvovirus, Moquillo, Rabia |
|
||||
| Felino (Gato) | FEL | Triple Felina, Leucemia, Rabia |
|
||||
| Ave | AVE | Variable segun tipo |
|
||||
| Reptil | REP | Sin vacunas estandar |
|
||||
| Roedor | ROE | Sin vacunas estandar |
|
||||
| Pez | PEZ | Tratamientos de agua |
|
||||
| Exotico | EXO | Segun especie |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**veterinaria.propietarios**
|
||||
- id, tenant_id, partner_id (opcional)
|
||||
- nombre, apellidos, telefono, telefono_emergencia
|
||||
- email, direccion, rfc
|
||||
- active
|
||||
|
||||
**veterinaria.mascotas**
|
||||
- id, tenant_id, propietario_id
|
||||
- especie_id, raza_id
|
||||
- nombre, sexo, fecha_nacimiento, edad_aproximada
|
||||
- color, peso_kg
|
||||
- numero_chip, tiene_chip
|
||||
- esterilizado, fecha_esterilizacion
|
||||
- alergias, condiciones_especiales, notas
|
||||
- foto_url, active
|
||||
|
||||
**veterinaria.especies** (Catalogo)
|
||||
- id, tenant_id, nombre, nombre_cientifico
|
||||
|
||||
**veterinaria.razas** (Catalogo)
|
||||
- id, tenant_id, especie_id, nombre
|
||||
- tamanio_promedio, peso_promedio_kg
|
||||
|
||||
## Endpoints API
|
||||
|
||||
### Propietarios
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /propietarios | Listar propietarios |
|
||||
| GET | /propietarios/:id | Detalle propietario |
|
||||
| POST | /propietarios | Crear propietario |
|
||||
| PUT | /propietarios/:id | Actualizar |
|
||||
| DELETE | /propietarios/:id | Desactivar |
|
||||
| GET | /propietarios/:id/mascotas | Mascotas del propietario |
|
||||
|
||||
### Mascotas
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /mascotas | Listar mascotas |
|
||||
| GET | /mascotas/:id | Detalle mascota |
|
||||
| POST | /mascotas | Registrar mascota |
|
||||
| PUT | /mascotas/:id | Actualizar |
|
||||
| DELETE | /mascotas/:id | Desactivar |
|
||||
| GET | /mascotas/chip/:numero | Buscar por microchip |
|
||||
| POST | /mascotas/:id/foto | Subir foto |
|
||||
| GET | /mascotas/:id/historial-peso | Historial de pesos |
|
||||
| POST | /mascotas/:id/peso | Registrar peso |
|
||||
|
||||
### Catalogos
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /especies | Listar especies |
|
||||
| GET | /especies/:id/razas | Razas de especie |
|
||||
| POST | /razas | Crear raza |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface MascotasService {
|
||||
getAll(filters?: MascotaFilters): Promise<Mascota[]>;
|
||||
getById(id: string): Promise<Mascota>;
|
||||
create(data: CreateMascota): Promise<Mascota>;
|
||||
update(id: string, data: UpdateMascota): Promise<Mascota>;
|
||||
findByChip(numeroChip: string): Promise<Mascota | null>;
|
||||
registrarPeso(mascotaId: string, pesoKg: number): Promise<void>;
|
||||
getHistorialPeso(mascotaId: string): Promise<PesoHistorial[]>;
|
||||
}
|
||||
|
||||
interface PropietariosService {
|
||||
getAll(filters?: PropietarioFilters): Promise<Propietario[]>;
|
||||
getById(id: string): Promise<Propietario>;
|
||||
create(data: CreatePropietario): Promise<Propietario>;
|
||||
getMascotas(propietarioId: string): Promise<Mascota[]>;
|
||||
}
|
||||
|
||||
interface CreateMascota {
|
||||
propietarioId: string;
|
||||
especieId: string;
|
||||
razaId?: string;
|
||||
nombre: string;
|
||||
sexo: SexoAnimal;
|
||||
fechaNacimiento?: Date;
|
||||
edadAproximada?: string;
|
||||
color?: string;
|
||||
pesoKg?: number;
|
||||
numeroChip?: string;
|
||||
esterilizado?: boolean;
|
||||
alergias?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Registrar Nueva Mascota
|
||||
|
||||
```
|
||||
1. Propietario llega a registrar mascota
|
||||
2. Buscar si propietario existe (por telefono)
|
||||
3. Si no existe, crear propietario
|
||||
4. Crear registro de mascota:
|
||||
- Seleccionar especie
|
||||
- Seleccionar raza (opcional)
|
||||
- Datos basicos (nombre, sexo, edad)
|
||||
- Identificacion (chip si tiene)
|
||||
- Tomar foto
|
||||
5. Guardar y abrir expediente
|
||||
```
|
||||
|
||||
### Buscar por Microchip
|
||||
|
||||
```
|
||||
1. Escanear microchip
|
||||
2. Buscar en base de datos
|
||||
3. Si existe: mostrar expediente
|
||||
4. Si no existe: opcion de registrar
|
||||
5. Validar propietario actual
|
||||
```
|
||||
|
||||
## Signos Vitales por Especie
|
||||
|
||||
| Especie | Temp Normal | FC Normal | FR Normal |
|
||||
|---------|-------------|-----------|-----------|
|
||||
| Canino | 38-39°C | 60-120 lpm | 10-30 rpm |
|
||||
| Felino | 38-39°C | 120-180 lpm | 20-40 rpm |
|
||||
| Conejo | 38.5-40°C | 130-325 lpm | 30-60 rpm |
|
||||
| Ave | 40-42°C | Variable | Variable |
|
||||
|
||||
## Componentes Frontend
|
||||
|
||||
### MascotaCard
|
||||
|
||||
```typescript
|
||||
interface MascotaCardProps {
|
||||
mascota: Mascota;
|
||||
onClick: () => void;
|
||||
showOwner?: boolean;
|
||||
}
|
||||
|
||||
// Muestra:
|
||||
// - Foto de la mascota
|
||||
// - Nombre y especie
|
||||
// - Raza
|
||||
// - Edad
|
||||
// - Chip (si tiene)
|
||||
// - Estado (activo/fallecido)
|
||||
```
|
||||
|
||||
### MascotaForm
|
||||
|
||||
```typescript
|
||||
interface MascotaFormProps {
|
||||
propietarioId: string;
|
||||
onSave: (mascota: Mascota) => void;
|
||||
}
|
||||
|
||||
// Campos:
|
||||
// - Nombre
|
||||
// - Especie (dropdown)
|
||||
// - Raza (dropdown filtrado por especie)
|
||||
// - Sexo
|
||||
// - Fecha nacimiento / Edad aproximada
|
||||
// - Color
|
||||
// - Peso
|
||||
// - Microchip
|
||||
// - Esterilizado
|
||||
// - Alergias
|
||||
// - Foto
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL mascotas | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| DDL propietarios | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| mascotas.module.ts | Pendiente | `backend/modules/mascotas/` |
|
||||
| propietarios.module.ts | Pendiente | `backend/modules/propietarios/` |
|
||||
| MascotaCard.tsx | Pendiente | `frontend/components/` |
|
||||
| MascotaForm.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- Auth/Tenants (erp-core)
|
||||
|
||||
### Bloquea a
|
||||
- VET-002 (Vacunacion - requiere mascota)
|
||||
- VET-003 (Desparasitaciones)
|
||||
- VET-004 (Hospitalizacion)
|
||||
- VET-005 (Estetica)
|
||||
- Consultas veterinarias
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] CRUD propietarios funciona
|
||||
- [ ] CRUD mascotas funciona
|
||||
- [ ] Catalogos de especies/razas
|
||||
- [ ] Busqueda por microchip
|
||||
- [ ] Foto se sube correctamente
|
||||
- [ ] Historial de peso funciona
|
||||
- [ ] Vinculacion propietario-mascota
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
268
docs/01-epicas/VET-002-vacunacion.md
Normal file
268
docs/01-epicas/VET-002-vacunacion.md
Normal file
@ -0,0 +1,268 @@
|
||||
# VET-002: Cartilla de Vacunacion
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-002
|
||||
- **Modulo:** Vacunacion
|
||||
- **Prioridad:** P0
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 2 - Vacunacion
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de cartilla de vacunacion digital: registro de aplicaciones, esquemas por especie, control de lotes, alertas de refuerzos, generacion de certificados, y reportes para SENASICA.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de vacunas aplicadas
|
||||
2. Esquemas por especie y edad
|
||||
3. Control de lotes y fabricantes
|
||||
4. Alertas de proximos refuerzos
|
||||
5. Reportes SENASICA
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Catalogo de vacunas por especie
|
||||
- Registro de aplicaciones con lote
|
||||
- Calculo automatico de proxima dosis
|
||||
- Alertas por email/SMS/push
|
||||
- Historial de vacunacion por mascota
|
||||
- Certificado de vacunacion (PDF)
|
||||
- Reporte mensual SENASICA
|
||||
|
||||
### Excluido
|
||||
- Integracion directa con API SENASICA
|
||||
- Compra de vacunas desde sistema
|
||||
- Cadena de frio/temperatura
|
||||
|
||||
## Esquemas de Vacunacion
|
||||
|
||||
### Caninos (Perros)
|
||||
|
||||
```yaml
|
||||
cachorro:
|
||||
6_semanas:
|
||||
- Parvovirus
|
||||
8_semanas:
|
||||
- Quintuple (DHPPI+L)
|
||||
12_semanas:
|
||||
- Refuerzo Quintuple
|
||||
16_semanas:
|
||||
- Rabia
|
||||
anual:
|
||||
- Quintuple + Rabia
|
||||
|
||||
opcional:
|
||||
- Bordetella (cada 6 meses, perros sociales)
|
||||
- Giardia
|
||||
- Lyme (zonas endemicas)
|
||||
```
|
||||
|
||||
### Felinos (Gatos)
|
||||
|
||||
```yaml
|
||||
gatito:
|
||||
8_semanas:
|
||||
- Triple Felina (PRC)
|
||||
12_semanas:
|
||||
- Refuerzo Triple + Leucemia Felina
|
||||
16_semanas:
|
||||
- Rabia
|
||||
anual:
|
||||
- Triple Felina + Rabia
|
||||
|
||||
opcional:
|
||||
- Leucemia Felina (gatos de exterior)
|
||||
- PIF (peritonitis infecciosa)
|
||||
```
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**veterinaria.vacunas** (Catalogo)
|
||||
- id, tenant_id, nombre, descripcion
|
||||
- especie_id, laboratorio
|
||||
- dosis_ml, intervalo_refuerzo_dias
|
||||
- es_obligatoria, active
|
||||
|
||||
**veterinaria.cartilla_vacunacion**
|
||||
- id, tenant_id, mascota_id, vacuna_id
|
||||
- veterinario_id
|
||||
- fecha_aplicacion, fecha_proximo_refuerzo
|
||||
- lote, laboratorio
|
||||
- observaciones
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /vacunas | Catalogo de vacunas |
|
||||
| GET | /vacunas/especie/:id | Vacunas por especie |
|
||||
| POST | /vacunas | Crear vacuna en catalogo |
|
||||
| GET | /mascotas/:id/vacunacion | Cartilla de mascota |
|
||||
| POST | /mascotas/:id/vacunacion | Registrar vacuna aplicada |
|
||||
| DELETE | /vacunacion/:id | Eliminar registro |
|
||||
| GET | /vacunacion/proximas | Refuerzos proximos (7 dias) |
|
||||
| GET | /vacunacion/vencidas | Refuerzos vencidos |
|
||||
| GET | /mascotas/:id/certificado | Generar certificado PDF |
|
||||
| GET | /reportes/senasica | Reporte mensual |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface VacunacionService {
|
||||
getCatalogo(especieId?: string): Promise<Vacuna[]>;
|
||||
getCartilla(mascotaId: string): Promise<VacunacionRecord[]>;
|
||||
aplicar(data: AplicarVacuna): Promise<VacunacionRecord>;
|
||||
getProximosRefuerzos(dias: number): Promise<RefuerzoPendiente[]>;
|
||||
getVencidos(): Promise<RefuerzoPendiente[]>;
|
||||
generarCertificado(mascotaId: string): Promise<Buffer>;
|
||||
getReporteSenasica(mes: number, anio: number): Promise<ReporteSenasica>;
|
||||
}
|
||||
|
||||
interface AplicarVacuna {
|
||||
mascotaId: string;
|
||||
vacunaId: string;
|
||||
veterinarioId: string;
|
||||
fechaAplicacion: Date;
|
||||
lote: string;
|
||||
laboratorio?: string;
|
||||
observaciones?: string;
|
||||
}
|
||||
|
||||
interface RefuerzoPendiente {
|
||||
mascota: Mascota;
|
||||
propietario: Propietario;
|
||||
vacuna: Vacuna;
|
||||
fechaRefuerzo: Date;
|
||||
diasRestantes: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Aplicar Vacuna
|
||||
|
||||
```
|
||||
1. Consulta veterinaria
|
||||
2. Veterinario decide vacunar
|
||||
3. Seleccionar vacuna del catalogo
|
||||
4. Registrar lote (obligatorio)
|
||||
5. Sistema calcula fecha proxima
|
||||
6. Guardar en cartilla
|
||||
7. Imprimir certificado (opcional)
|
||||
8. Agregar a factura
|
||||
```
|
||||
|
||||
### Alertas de Refuerzos
|
||||
|
||||
```
|
||||
Diario (cron job):
|
||||
1. Buscar refuerzos que vencen en 7 dias
|
||||
2. Filtrar por preferencias de propietario
|
||||
3. Enviar notificaciones:
|
||||
- Email: 7 dias antes
|
||||
- SMS: 3 dias antes
|
||||
- Push: 1 dia antes
|
||||
4. Marcar como notificado
|
||||
```
|
||||
|
||||
### Reporte SENASICA
|
||||
|
||||
```
|
||||
Mensual:
|
||||
1. Filtrar vacunas de rabia aplicadas
|
||||
2. Agrupar por especie y municipio
|
||||
3. Incluir datos del veterinario
|
||||
4. Generar formato oficial
|
||||
5. Exportar para envio
|
||||
```
|
||||
|
||||
## Certificado de Vacunacion
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ CERTIFICADO DE VACUNACION │
|
||||
│ Clinica Veterinaria XYZ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ DATOS DE LA MASCOTA │
|
||||
│ Nombre: Firulais │
|
||||
│ Especie: Canino Raza: Labrador │
|
||||
│ Sexo: Macho Edad: 2 años │
|
||||
│ Color: Amarillo Chip: 123456789012345 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ DATOS DEL PROPIETARIO │
|
||||
│ Nombre: Juan Perez Garcia │
|
||||
│ Telefono: 555-123-4567 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ HISTORIAL DE VACUNACION │
|
||||
│ Fecha │ Vacuna │ Lote │ Prox.Ref │
|
||||
│ 07/01/2026 │ Rabia │ R12345 │ 07/01/2027 │
|
||||
│ 07/01/2026 │ Quintuple │ Q98765 │ 07/01/2027 │
|
||||
│ 15/06/2025 │ Quintuple │ Q54321 │ - │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Veterinario: Dr. Maria Lopez │
|
||||
│ Cedula Profesional: 12345678 │
|
||||
│ Firma: _________________________ │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Alertas Configurables
|
||||
|
||||
```typescript
|
||||
interface ConfiguracionAlertas {
|
||||
email: {
|
||||
enabled: boolean;
|
||||
diasAntes: number; // default: 7
|
||||
};
|
||||
sms: {
|
||||
enabled: boolean;
|
||||
diasAntes: number; // default: 3
|
||||
};
|
||||
push: {
|
||||
enabled: boolean;
|
||||
diasAntes: number; // default: 1
|
||||
};
|
||||
whatsapp: {
|
||||
enabled: boolean;
|
||||
diasAntes: number;
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL cartilla | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| DDL vacunas | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| vacunacion.module.ts | Pendiente | `backend/modules/vacunacion/` |
|
||||
| CartillaVacunacion.tsx | Pendiente | `frontend/components/` |
|
||||
| CertificadoPDF.ts | Pendiente | `backend/services/` |
|
||||
| Seeds vacunas | Pendiente | `database/seeds/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- VET-001 (Mascotas)
|
||||
- clinica.doctors (erp-clinicas)
|
||||
- Notifications service
|
||||
|
||||
### Bloquea a
|
||||
- Reportes SENASICA
|
||||
- App para propietarios
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Catalogo de vacunas por especie
|
||||
- [ ] Registro de aplicacion con lote
|
||||
- [ ] Fecha proxima se calcula
|
||||
- [ ] Alertas se envian
|
||||
- [ ] Certificado PDF se genera
|
||||
- [ ] Historial completo visible
|
||||
- [ ] Reporte SENASICA correcto
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
222
docs/01-epicas/VET-003-desparasitaciones.md
Normal file
222
docs/01-epicas/VET-003-desparasitaciones.md
Normal file
@ -0,0 +1,222 @@
|
||||
# VET-003: Desparasitaciones
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-003
|
||||
- **Modulo:** Desparasitaciones
|
||||
- **Prioridad:** P1
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 2 - Vacunacion
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de control de desparasitaciones internas y externas: registro de aplicaciones, productos utilizados, dosis por peso, alertas de proximas desparasitaciones, y historial por mascota.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de desparasitaciones
|
||||
2. Control de productos y dosis
|
||||
3. Alertas de proximas aplicaciones
|
||||
4. Historial por mascota
|
||||
5. Recomendaciones por especie
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Tipos: interna, externa, ambas
|
||||
- Registro de producto y dosis
|
||||
- Via de administracion
|
||||
- Calculo de proxima aplicacion
|
||||
- Historial cronologico
|
||||
- Alertas automaticas
|
||||
|
||||
### Excluido
|
||||
- Inventario de productos
|
||||
- Calculo automatico de dosis por peso
|
||||
- Integracion con laboratorios
|
||||
|
||||
## Tipos de Desparasitacion
|
||||
|
||||
| Tipo | Descripcion | Frecuencia Tipica |
|
||||
|------|-------------|-------------------|
|
||||
| Interna | Parasitos intestinales | Cada 3-6 meses |
|
||||
| Externa | Pulgas, garrapatas | Cada 1-3 meses |
|
||||
| Ambas | Combinada | Segun producto |
|
||||
|
||||
## Productos Comunes
|
||||
|
||||
### Desparasitantes Internos
|
||||
| Producto | Principio Activo | Presentacion |
|
||||
|----------|------------------|--------------|
|
||||
| Drontal | Praziquantel + Pirantel | Tableta |
|
||||
| Panacur | Fenbendazol | Suspension |
|
||||
| Milbemax | Milbemicina + Praziquantel | Tableta |
|
||||
|
||||
### Desparasitantes Externos
|
||||
| Producto | Principio Activo | Presentacion |
|
||||
|----------|------------------|--------------|
|
||||
| Frontline | Fipronil | Pipeta |
|
||||
| Nexgard | Afoxolaner | Tableta masticable |
|
||||
| Seresto | Imidacloprid + Flumetrina | Collar |
|
||||
| Bravecto | Fluralaner | Tableta/Pipeta |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tabla: veterinaria.desparasitaciones
|
||||
|
||||
| Campo | Tipo | Descripcion |
|
||||
|-------|------|-------------|
|
||||
| id | UUID | PK |
|
||||
| tenant_id | UUID | FK |
|
||||
| mascota_id | UUID | FK |
|
||||
| veterinario_id | UUID | FK |
|
||||
| tipo | VARCHAR(50) | interna, externa, ambas |
|
||||
| producto | VARCHAR(100) | Nombre del producto |
|
||||
| dosis | VARCHAR(50) | Cantidad administrada |
|
||||
| via_administracion | VARCHAR(50) | oral, topica, inyectable |
|
||||
| fecha_aplicacion | DATE | Fecha de aplicacion |
|
||||
| fecha_proxima | DATE | Proxima aplicacion |
|
||||
| observaciones | TEXT | Notas |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /mascotas/:id/desparasitaciones | Historial |
|
||||
| POST | /mascotas/:id/desparasitaciones | Registrar |
|
||||
| PUT | /desparasitaciones/:id | Actualizar |
|
||||
| DELETE | /desparasitaciones/:id | Eliminar |
|
||||
| GET | /desparasitaciones/proximas | Proximas 30 dias |
|
||||
| GET | /desparasitaciones/vencidas | Vencidas |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface DesparasitacionesService {
|
||||
getByMascota(mascotaId: string): Promise<Desparasitacion[]>;
|
||||
registrar(data: RegistrarDesparasitacion): Promise<Desparasitacion>;
|
||||
getProximas(dias: number): Promise<DesparasitacionPendiente[]>;
|
||||
getVencidas(): Promise<DesparasitacionPendiente[]>;
|
||||
}
|
||||
|
||||
interface RegistrarDesparasitacion {
|
||||
mascotaId: string;
|
||||
veterinarioId?: string;
|
||||
tipo: 'interna' | 'externa' | 'ambas';
|
||||
producto: string;
|
||||
dosis?: string;
|
||||
viaAdministracion: string;
|
||||
fechaAplicacion: Date;
|
||||
fechaProxima?: Date;
|
||||
observaciones?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Registrar Desparasitacion
|
||||
|
||||
```
|
||||
1. Durante consulta o en recepcion
|
||||
2. Seleccionar mascota
|
||||
3. Indicar tipo (interna/externa/ambas)
|
||||
4. Seleccionar/escribir producto
|
||||
5. Indicar dosis y via
|
||||
6. Registrar fecha aplicacion
|
||||
7. Sistema sugiere fecha proxima (configurable)
|
||||
8. Guardar registro
|
||||
9. Agregar a cuenta del cliente
|
||||
```
|
||||
|
||||
### Recordatorios
|
||||
|
||||
```
|
||||
Semanal (cron job):
|
||||
1. Buscar desparasitaciones proximas (30 dias)
|
||||
2. Agrupar por propietario
|
||||
3. Enviar recordatorio consolidado
|
||||
4. Email con lista de mascotas
|
||||
```
|
||||
|
||||
## Frecuencias Recomendadas
|
||||
|
||||
### Por Especie y Situacion
|
||||
|
||||
```typescript
|
||||
const FRECUENCIAS = {
|
||||
canino: {
|
||||
cachorro: { interna: 15, externa: 30 }, // dias
|
||||
adulto: { interna: 90, externa: 30 },
|
||||
gestante: { interna: 45, externa: 30 }
|
||||
},
|
||||
felino: {
|
||||
cachorro: { interna: 15, externa: 30 },
|
||||
adulto: { interna: 90, externa: 30 },
|
||||
interior: { interna: 180, externa: 60 } // gatos de interior
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## Componentes Frontend
|
||||
|
||||
### DesparasitacionForm
|
||||
|
||||
```typescript
|
||||
interface DesparasitacionFormProps {
|
||||
mascota: Mascota;
|
||||
onSave: (data: Desparasitacion) => void;
|
||||
}
|
||||
|
||||
// Campos:
|
||||
// - Tipo (radio: interna/externa/ambas)
|
||||
// - Producto (autocomplete o texto)
|
||||
// - Dosis
|
||||
// - Via (dropdown: oral, topica, inyectable)
|
||||
// - Fecha aplicacion
|
||||
// - Fecha proxima (calculada, editable)
|
||||
// - Observaciones
|
||||
```
|
||||
|
||||
### DesparasitacionTimeline
|
||||
|
||||
```typescript
|
||||
// Muestra historial visual:
|
||||
// ┌────────────────────────────────────────┐
|
||||
// │ ● 07/01/2026 - Interna - Drontal │
|
||||
// │ Proxima: 07/04/2026 (en 90 dias) │
|
||||
// ├────────────────────────────────────────┤
|
||||
// │ ● 15/12/2025 - Externa - Frontline │
|
||||
// │ Proxima: 15/01/2026 (VENCIDA) │
|
||||
// └────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL desparasitaciones | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| desparasitaciones.module.ts | Pendiente | `backend/modules/desparasitaciones/` |
|
||||
| DesparasitacionForm.tsx | Pendiente | `frontend/components/` |
|
||||
| DesparasitacionTimeline.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- VET-001 (Mascotas)
|
||||
- Notifications service
|
||||
|
||||
### Bloquea a
|
||||
- Dashboard de salud de mascota
|
||||
- App para propietarios
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Registro de desparasitacion funciona
|
||||
- [ ] Tipos interna/externa/ambas
|
||||
- [ ] Fecha proxima se calcula
|
||||
- [ ] Historial cronologico visible
|
||||
- [ ] Alertas de vencidas
|
||||
- [ ] Proximas desparasitaciones se listan
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
274
docs/01-epicas/VET-004-hospitalizacion.md
Normal file
274
docs/01-epicas/VET-004-hospitalizacion.md
Normal file
@ -0,0 +1,274 @@
|
||||
# VET-004: Hospitalizacion
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-004
|
||||
- **Modulo:** Hospitalizacion
|
||||
- **Prioridad:** P1
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 3 - Hospitalizacion
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de hospitalizacion veterinaria: ingreso de pacientes, asignacion de espacios (jaulas/kennels), monitoreo de signos vitales, administracion de medicamentos, y proceso de alta.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Registro de ingresos
|
||||
2. Asignacion de espacios
|
||||
3. Monitoreo periodico
|
||||
4. Control de medicamentos
|
||||
5. Proceso de alta
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Ingreso con diagnostico inicial
|
||||
- Asignacion de jaula/kennel/UCI
|
||||
- Monitoreo cada X horas (configurable)
|
||||
- Registro de signos vitales
|
||||
- Estado de alimentacion/eliminacion
|
||||
- Notas de evolucion
|
||||
- Alta con instrucciones
|
||||
- Costos acumulados
|
||||
|
||||
### Excluido
|
||||
- Sensores automaticos
|
||||
- Camaras de vigilancia
|
||||
- Sistema de ventiladores/temperatura
|
||||
|
||||
## Estados de Hospitalizacion
|
||||
|
||||
```
|
||||
ingresado ──► en_tratamiento ──► estable ──► alta
|
||||
│
|
||||
├──► critico
|
||||
│
|
||||
└──► fallecido
|
||||
```
|
||||
|
||||
| Estado | Descripcion | Acciones |
|
||||
|--------|-------------|----------|
|
||||
| ingresado | Recien llegado | Evaluacion inicial |
|
||||
| en_tratamiento | Recibiendo cuidados | Monitoreo activo |
|
||||
| estable | Mejorando | Reducir monitoreo |
|
||||
| critico | Grave | Monitoreo intensivo |
|
||||
| alta | Dado de alta | Cerrar expediente |
|
||||
| fallecido | Fallecio | Registro de deceso |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tablas
|
||||
|
||||
**veterinaria.hospitalizacion**
|
||||
- id, tenant_id, mascota_id, veterinario_id
|
||||
- consultation_id
|
||||
- fecha_ingreso, motivo_ingreso, diagnostico_ingreso
|
||||
- area, numero_jaula
|
||||
- estado
|
||||
- fecha_alta, diagnostico_alta, instrucciones_alta
|
||||
|
||||
**veterinaria.hospitalizacion_monitoreo**
|
||||
- id, tenant_id, hospitalizacion_id
|
||||
- fecha_hora
|
||||
- peso_kg, temperatura
|
||||
- frecuencia_cardiaca, frecuencia_respiratoria
|
||||
- comio, bebio_agua, orino, defeco
|
||||
- consistencia_heces, estado_animo
|
||||
- nivel_dolor (0-10)
|
||||
- observaciones, registrado_por
|
||||
|
||||
## Signos Vitales Normales
|
||||
|
||||
| Especie | Temperatura | FC | FR |
|
||||
|---------|-------------|-----|-----|
|
||||
| Canino | 38-39°C | 60-120 lpm | 10-30 rpm |
|
||||
| Felino | 38-39°C | 120-180 lpm | 20-40 rpm |
|
||||
| Conejo | 38.5-40°C | 130-325 lpm | 30-60 rpm |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /hospitalizacion | Pacientes hospitalizados |
|
||||
| GET | /hospitalizacion/:id | Detalle |
|
||||
| POST | /hospitalizacion | Ingresar paciente |
|
||||
| PUT | /hospitalizacion/:id | Actualizar |
|
||||
| PUT | /hospitalizacion/:id/alta | Dar de alta |
|
||||
| GET | /hospitalizacion/:id/monitoreos | Historial monitoreos |
|
||||
| POST | /hospitalizacion/:id/monitoreos | Registrar monitoreo |
|
||||
| GET | /hospitalizacion/espacios | Disponibilidad jaulas |
|
||||
| PUT | /hospitalizacion/:id/espacio | Cambiar espacio |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface HospitalizacionService {
|
||||
getActivos(): Promise<Hospitalizacion[]>;
|
||||
getById(id: string): Promise<Hospitalizacion>;
|
||||
ingresar(data: IngresoHospitalizacion): Promise<Hospitalizacion>;
|
||||
darAlta(id: string, data: AltaHospitalizacion): Promise<Hospitalizacion>;
|
||||
registrarMonitoreo(hospId: string, data: Monitoreo): Promise<Monitoreo>;
|
||||
getMonitoreos(hospId: string): Promise<Monitoreo[]>;
|
||||
getEspaciosDisponibles(): Promise<Espacio[]>;
|
||||
}
|
||||
|
||||
interface IngresoHospitalizacion {
|
||||
mascotaId: string;
|
||||
veterinarioId: string;
|
||||
consultationId?: string;
|
||||
motivoIngreso: string;
|
||||
diagnosticoIngreso?: string;
|
||||
area: string;
|
||||
numeroJaula?: string;
|
||||
}
|
||||
|
||||
interface Monitoreo {
|
||||
fechaHora: Date;
|
||||
pesoKg?: number;
|
||||
temperatura?: number;
|
||||
frecuenciaCardiaca?: number;
|
||||
frecuenciaRespiratoria?: number;
|
||||
comio: boolean;
|
||||
bebioAgua: boolean;
|
||||
orino: boolean;
|
||||
defeco: boolean;
|
||||
consistenciaHeces?: string;
|
||||
estadoAnimo?: string;
|
||||
nivelDolor?: number;
|
||||
observaciones?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Ingresar Paciente
|
||||
|
||||
```
|
||||
1. Veterinario decide hospitalizar
|
||||
2. Crear registro de hospitalizacion:
|
||||
- Motivo de ingreso
|
||||
- Diagnostico inicial
|
||||
- Indicaciones
|
||||
3. Verificar disponibilidad de espacios
|
||||
4. Asignar jaula/kennel
|
||||
5. Registrar monitoreo inicial
|
||||
6. Notificar a propietario
|
||||
7. Configurar frecuencia de monitoreo
|
||||
```
|
||||
|
||||
### Monitoreo Periodico
|
||||
|
||||
```
|
||||
Cada X horas (configurable por estado):
|
||||
1. Auxiliar va a jaula
|
||||
2. Pesar mascota (si aplica)
|
||||
3. Tomar temperatura
|
||||
4. Registrar signos vitales
|
||||
5. Verificar alimentacion/eliminacion
|
||||
6. Evaluar estado de animo y dolor
|
||||
7. Notas de observacion
|
||||
8. Guardar en sistema
|
||||
9. Alertar si valores anormales
|
||||
```
|
||||
|
||||
### Dar de Alta
|
||||
|
||||
```
|
||||
1. Veterinario evalua condicion
|
||||
2. Decide dar de alta
|
||||
3. Registrar diagnostico final
|
||||
4. Escribir instrucciones para propietario
|
||||
5. Cambiar estado a "alta"
|
||||
6. Generar resumen de hospitalizacion
|
||||
7. Calcular costos totales
|
||||
8. Notificar a propietario
|
||||
9. Liberar espacio
|
||||
```
|
||||
|
||||
## Panel de Control
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ HOSPITALIZACION - Panel de Control │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Jaulas Pequenas (8) │ ■ ■ ■ ■ ■ □ □ □ │
|
||||
│ Jaulas Grandes (4) │ ■ ■ □ □ │
|
||||
│ UCI (2) │ ■ □ │
|
||||
│ Kennels (6) │ ■ ■ ■ □ □ □ │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ ■ = Ocupado □ = Disponible │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ PACIENTES ACTIVOS │
|
||||
│ ┌─────────────────────────────────────────────────────┐
|
||||
│ │ 🐕 Firulais (J-03) | Ingreso: 05/01 | ESTABLE │
|
||||
│ │ Ultimo monitoreo: hace 2 horas │
|
||||
│ ├─────────────────────────────────────────────────────┤
|
||||
│ │ 🐈 Michi (J-07) | Ingreso: 06/01 | EN_TRATAMIENTO │
|
||||
│ │ Ultimo monitoreo: hace 4 horas ⚠️ │
|
||||
│ ├─────────────────────────────────────────────────────┤
|
||||
│ │ 🐕 Rocky (UCI-01) | Ingreso: 07/01 | CRITICO │
|
||||
│ │ Ultimo monitoreo: hace 30 min │
|
||||
│ └─────────────────────────────────────────────────────┘
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Frecuencia de Monitoreo
|
||||
|
||||
| Estado | Frecuencia |
|
||||
|--------|------------|
|
||||
| critico | Cada 1-2 horas |
|
||||
| en_tratamiento | Cada 4 horas |
|
||||
| estable | Cada 8 horas |
|
||||
| ingresado | Evaluacion inicial |
|
||||
|
||||
## Costos de Hospitalizacion
|
||||
|
||||
```typescript
|
||||
interface CostosHospitalizacion {
|
||||
diasInternado: number;
|
||||
costoPorDia: number;
|
||||
medicamentos: CostoMedicamento[];
|
||||
procedimientos: CostoProcedimiento[];
|
||||
estudios: CostoEstudio[];
|
||||
subtotal: number;
|
||||
descuento?: number;
|
||||
total: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL hospitalizacion | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| DDL monitoreo | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| hospitalizacion.module.ts | Pendiente | `backend/modules/hospitalizacion/` |
|
||||
| HospitalizacionPanel.tsx | Pendiente | `frontend/components/` |
|
||||
| MonitoreoForm.tsx | Pendiente | `frontend/components/` |
|
||||
| EspaciosGrid.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- VET-001 (Mascotas)
|
||||
- clinica.consultations (erp-clinicas)
|
||||
- clinica.doctors (erp-clinicas)
|
||||
|
||||
### Bloquea a
|
||||
- Reportes de ocupacion
|
||||
- Dashboard gerencial
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Ingreso de pacientes funciona
|
||||
- [ ] Asignacion de espacios
|
||||
- [ ] Monitoreo se registra
|
||||
- [ ] Estados se actualizan
|
||||
- [ ] Alta genera resumen
|
||||
- [ ] Panel muestra ocupacion
|
||||
- [ ] Alertas de monitoreo vencido
|
||||
- [ ] Costos se calculan
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
250
docs/01-epicas/VET-005-estetica.md
Normal file
250
docs/01-epicas/VET-005-estetica.md
Normal file
@ -0,0 +1,250 @@
|
||||
# VET-005: Estetica (Grooming)
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-005
|
||||
- **Modulo:** Estetica
|
||||
- **Prioridad:** P2
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 4 - Servicios Adicionales
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de servicios de estetica canina y felina (grooming): agenda de servicios, tipos de corte, productos utilizados, observaciones de piel/pelaje, y registro de tiempos.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Agenda de servicios de estetica
|
||||
2. Registro de servicios realizados
|
||||
3. Control de productos (shampoos)
|
||||
4. Observaciones de piel/pelaje
|
||||
5. Historial por mascota
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Tipos de servicio: bano, corte, limpieza oidos, corte unas
|
||||
- Tipos de corte por raza
|
||||
- Productos/shampoos utilizados
|
||||
- Estado del servicio
|
||||
- Hora inicio/fin
|
||||
- Observaciones de piel
|
||||
- Precio por servicio
|
||||
|
||||
### Excluido
|
||||
- Reservas online
|
||||
- Fotos antes/despues
|
||||
- Calificacion del cliente
|
||||
|
||||
## Servicios de Estetica
|
||||
|
||||
| Servicio | Descripcion | Duracion Aprox |
|
||||
|----------|-------------|----------------|
|
||||
| Bano | Bano con shampoo | 30-45 min |
|
||||
| Corte | Corte de pelo | 45-90 min |
|
||||
| Bano + Corte | Servicio completo | 60-120 min |
|
||||
| Limpieza oidos | Limpieza auditiva | 10 min |
|
||||
| Corte unas | Corte de unas | 10 min |
|
||||
| Deslanado | Remocion de pelo muerto | 30-60 min |
|
||||
| Tratamiento piel | Tratamiento dermatologico | 30 min |
|
||||
|
||||
## Tipos de Corte por Raza
|
||||
|
||||
### Caninos
|
||||
| Raza | Cortes Tipicos |
|
||||
|------|----------------|
|
||||
| Poodle | Continental, Puppy, Teddy Bear |
|
||||
| Schnauzer | Schnauzer estandar, Puppy |
|
||||
| Cocker | Cocker estandar, Puppy |
|
||||
| Yorkshire | Show, Puppy |
|
||||
| Bichon | Bichon estandar, Teddy Bear |
|
||||
|
||||
### Felinos
|
||||
| Tipo | Cortes |
|
||||
|------|--------|
|
||||
| Pelo largo | Leon, Higienico |
|
||||
| Pelo corto | Solo bano (sin corte) |
|
||||
|
||||
## Modelo de Datos
|
||||
|
||||
### Tabla: veterinaria.estetica
|
||||
|
||||
| Campo | Tipo | Descripcion |
|
||||
|-------|------|-------------|
|
||||
| id | UUID | PK |
|
||||
| tenant_id | UUID | FK |
|
||||
| mascota_id | UUID | FK |
|
||||
| estilista_id | UUID | FK empleado |
|
||||
| fecha_servicio | TIMESTAMPTZ | Fecha/hora |
|
||||
| servicios | TEXT[] | Lista de servicios |
|
||||
| tipo_corte | VARCHAR(50) | Tipo de corte |
|
||||
| shampoo_usado | VARCHAR(100) | Producto |
|
||||
| estado | VARCHAR(20) | pendiente, en_proceso, terminado |
|
||||
| hora_inicio | TIME | Inicio |
|
||||
| hora_fin | TIME | Fin |
|
||||
| observaciones | TEXT | Notas generales |
|
||||
| observaciones_piel | TEXT | Estado de piel/pelaje |
|
||||
| precio | NUMERIC(10,2) | Total |
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /estetica | Servicios del dia |
|
||||
| GET | /estetica/:id | Detalle servicio |
|
||||
| POST | /estetica | Agendar servicio |
|
||||
| PUT | /estetica/:id | Actualizar |
|
||||
| PUT | /estetica/:id/iniciar | Iniciar servicio |
|
||||
| PUT | /estetica/:id/terminar | Terminar servicio |
|
||||
| GET | /mascotas/:id/estetica | Historial mascota |
|
||||
| GET | /estetica/agenda | Agenda por fecha |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface EsteticaService {
|
||||
getDelDia(): Promise<Estetica[]>;
|
||||
getById(id: string): Promise<Estetica>;
|
||||
agendar(data: AgendarEstetica): Promise<Estetica>;
|
||||
iniciar(id: string): Promise<Estetica>;
|
||||
terminar(id: string, data: TerminarEstetica): Promise<Estetica>;
|
||||
getHistorial(mascotaId: string): Promise<Estetica[]>;
|
||||
getAgenda(fecha: Date): Promise<Estetica[]>;
|
||||
}
|
||||
|
||||
interface AgendarEstetica {
|
||||
mascotaId: string;
|
||||
estilistaId?: string;
|
||||
fechaServicio: Date;
|
||||
servicios: string[];
|
||||
tipoCorte?: string;
|
||||
precio?: number;
|
||||
}
|
||||
|
||||
interface TerminarEstetica {
|
||||
shampooUsado?: string;
|
||||
observaciones?: string;
|
||||
observacionesPiel?: string;
|
||||
precioFinal?: number;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Agendar Servicio
|
||||
|
||||
```
|
||||
1. Propietario solicita servicio
|
||||
2. Verificar disponibilidad de estilista
|
||||
3. Crear registro de estetica:
|
||||
- Mascota
|
||||
- Servicios solicitados
|
||||
- Tipo de corte (si aplica)
|
||||
- Fecha/hora
|
||||
4. Confirmar con propietario
|
||||
5. Estado: pendiente
|
||||
```
|
||||
|
||||
### Ejecutar Servicio
|
||||
|
||||
```
|
||||
1. Mascota llega a la clinica
|
||||
2. Estilista marca inicio
|
||||
3. Realiza servicios:
|
||||
- Bano
|
||||
- Secado
|
||||
- Corte (si aplica)
|
||||
- Extras (orejas, unas)
|
||||
4. Revisar piel/pelaje
|
||||
5. Registrar observaciones
|
||||
6. Marcar como terminado
|
||||
7. Notificar a propietario
|
||||
8. Agregar a cuenta
|
||||
```
|
||||
|
||||
## Productos/Shampoos
|
||||
|
||||
```typescript
|
||||
const SHAMPOOS = [
|
||||
{ nombre: 'Shampoo Regular', tipo: 'normal' },
|
||||
{ nombre: 'Shampoo Antipulgas', tipo: 'antiparasitario' },
|
||||
{ nombre: 'Shampoo Dermatologico', tipo: 'medicado' },
|
||||
{ nombre: 'Shampoo Pelo Blanco', tipo: 'especial' },
|
||||
{ nombre: 'Shampoo Cachorro', tipo: 'suave' },
|
||||
{ nombre: 'Acondicionador', tipo: 'complemento' }
|
||||
];
|
||||
```
|
||||
|
||||
## Observaciones de Piel
|
||||
|
||||
```typescript
|
||||
interface ObservacionesPiel {
|
||||
estado: 'normal' | 'irritada' | 'seca' | 'grasa' | 'con_lesiones';
|
||||
parasitos: boolean;
|
||||
pulgas: boolean;
|
||||
garrapatas: boolean;
|
||||
hotspots: boolean;
|
||||
perdidaPelo: boolean;
|
||||
nudos: 'ninguno' | 'pocos' | 'muchos';
|
||||
notas: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Panel de Estetica
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ ESTETICA - Agenda del Dia (07/01/2026) │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ 09:00 │ 🐕 Firulais │ Bano + Corte │ ✓ Terminado │
|
||||
│ 10:30 │ 🐈 Michi │ Bano │ ⏳ En proceso │
|
||||
│ 11:30 │ 🐕 Rocky │ Deslanado │ ⏸ Pendiente │
|
||||
│ 14:00 │ 🐕 Luna │ Bano + Corte │ ⏸ Pendiente │
|
||||
│ 15:30 │ 🐕 Max │ Corte unas │ ⏸ Pendiente │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ Estilistas: Ana (4 servicios), Carlos (1 servicio) │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Precios Sugeridos
|
||||
|
||||
| Servicio | Pequeno | Mediano | Grande |
|
||||
|----------|---------|---------|--------|
|
||||
| Bano | $150 | $200 | $300 |
|
||||
| Corte | $200 | $300 | $450 |
|
||||
| Bano + Corte | $300 | $450 | $650 |
|
||||
| Deslanado | $200 | $300 | $400 |
|
||||
| Limpieza oidos | $50 | $50 | $50 |
|
||||
| Corte unas | $50 | $50 | $50 |
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL estetica | Completado | `database/schemas/01-veterinaria-schema-ddl.sql` |
|
||||
| estetica.module.ts | Pendiente | `backend/modules/estetica/` |
|
||||
| EsteticaAgenda.tsx | Pendiente | `frontend/components/` |
|
||||
| EsteticaForm.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- VET-001 (Mascotas)
|
||||
- Employees (erp-core)
|
||||
|
||||
### Bloquea a
|
||||
- Reportes de productividad
|
||||
- App para propietarios
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Agendar servicio funciona
|
||||
- [ ] Lista de servicios configurable
|
||||
- [ ] Estados se actualizan
|
||||
- [ ] Hora inicio/fin se registra
|
||||
- [ ] Observaciones de piel
|
||||
- [ ] Historial por mascota
|
||||
- [ ] Precio se calcula
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
288
docs/01-epicas/VET-006-farmacia.md
Normal file
288
docs/01-epicas/VET-006-farmacia.md
Normal file
@ -0,0 +1,288 @@
|
||||
# VET-006: Farmacia Veterinaria
|
||||
|
||||
## Metadata
|
||||
- **Codigo:** VET-006
|
||||
- **Modulo:** Farmacia
|
||||
- **Prioridad:** P1
|
||||
- **Estado:** DDL Completado
|
||||
- **Fase:** 2 - Vacunacion
|
||||
- **DDL:** `database/schemas/02-veterinaria-farmacia-ddl.sql`
|
||||
|
||||
## Descripcion
|
||||
|
||||
Sistema de gestion de farmacia veterinaria: inventario de medicamentos, control de lotes y caducidades, dispensacion, medicamentos controlados, alertas de stock minimo, y trazabilidad.
|
||||
|
||||
## Objetivos
|
||||
|
||||
1. Inventario de medicamentos
|
||||
2. Control de lotes y caducidades
|
||||
3. Dispensacion con receta
|
||||
4. Medicamentos controlados
|
||||
5. Alertas de stock
|
||||
|
||||
## Alcance
|
||||
|
||||
### Incluido
|
||||
- Catalogo de medicamentos
|
||||
- Stock por lote
|
||||
- Alertas de caducidad (30, 15, 7 dias)
|
||||
- Alertas de stock minimo
|
||||
- Dispensacion desde receta
|
||||
- Registro de medicamentos controlados
|
||||
- Historial de movimientos
|
||||
|
||||
### Excluido
|
||||
- Compras a proveedores (usar inventario base)
|
||||
- Produccion/formulacion
|
||||
- Trazabilidad COFEPRIS completa
|
||||
|
||||
## Categorias de Medicamentos
|
||||
|
||||
| Categoria | Descripcion | Ejemplo |
|
||||
|-----------|-------------|---------|
|
||||
| Antibioticos | Contra infecciones | Amoxicilina, Enrofloxacina |
|
||||
| Antiparasitarios | Contra parasitos | Ivermectina, Fenbendazol |
|
||||
| Analgesicos | Contra dolor | Meloxicam, Tramadol |
|
||||
| Antiinflamatorios | Reducir inflamacion | Dexametasona, Prednisolona |
|
||||
| Vacunas | Inmunizacion | Rabia, Quintuple |
|
||||
| Vitaminas | Suplementos | Complejo B, Hierro |
|
||||
| Dermatologicos | Piel | Shampoos medicados |
|
||||
| Oftalmicos | Ojos | Gotas, unguentos |
|
||||
|
||||
## Modelo de Datos (Propuesto)
|
||||
|
||||
### Tablas
|
||||
|
||||
**veterinaria.medicamentos**
|
||||
- id, tenant_id
|
||||
- nombre, principio_activo
|
||||
- presentacion, laboratorio
|
||||
- requiere_receta, controlado
|
||||
- stock_minimo, precio_venta
|
||||
- active
|
||||
|
||||
**veterinaria.medicamentos_lotes**
|
||||
- id, tenant_id, medicamento_id
|
||||
- numero_lote, fecha_caducidad
|
||||
- cantidad_inicial, cantidad_actual
|
||||
- precio_compra
|
||||
- created_at
|
||||
|
||||
**veterinaria.dispensaciones**
|
||||
- id, tenant_id
|
||||
- receta_id, medicamento_id, lote_id
|
||||
- mascota_id, veterinario_id
|
||||
- cantidad, fecha
|
||||
- notas
|
||||
|
||||
## Endpoints API
|
||||
|
||||
| Metodo | Endpoint | Descripcion |
|
||||
|--------|----------|-------------|
|
||||
| GET | /farmacia/medicamentos | Catalogo |
|
||||
| GET | /farmacia/medicamentos/:id | Detalle con stock |
|
||||
| POST | /farmacia/medicamentos | Crear medicamento |
|
||||
| PUT | /farmacia/medicamentos/:id | Actualizar |
|
||||
| GET | /farmacia/lotes | Lotes activos |
|
||||
| POST | /farmacia/lotes | Registrar lote |
|
||||
| PUT | /farmacia/lotes/:id | Actualizar lote |
|
||||
| POST | /farmacia/dispensar | Dispensar medicamento |
|
||||
| GET | /farmacia/alertas/caducidad | Proximos a caducar |
|
||||
| GET | /farmacia/alertas/stock | Stock bajo |
|
||||
| GET | /farmacia/movimientos | Historial |
|
||||
|
||||
## Interfaz del Servicio
|
||||
|
||||
```typescript
|
||||
interface FarmaciaService {
|
||||
getMedicamentos(filters?: MedicamentoFilters): Promise<Medicamento[]>;
|
||||
getMedicamentoById(id: string): Promise<MedicamentoConStock>;
|
||||
getLotes(medicamentoId: string): Promise<Lote[]>;
|
||||
registrarLote(data: RegistrarLote): Promise<Lote>;
|
||||
dispensar(data: Dispensar): Promise<Dispensacion>;
|
||||
getAlertasCaducidad(dias: number): Promise<LoteAlerta[]>;
|
||||
getAlertasStock(): Promise<MedicamentoAlerta[]>;
|
||||
}
|
||||
|
||||
interface MedicamentoConStock {
|
||||
id: string;
|
||||
nombre: string;
|
||||
principioActivo: string;
|
||||
presentacion: string;
|
||||
stockTotal: number;
|
||||
stockMinimo: number;
|
||||
lotes: Lote[];
|
||||
requiereReceta: boolean;
|
||||
controlado: boolean;
|
||||
}
|
||||
|
||||
interface Dispensar {
|
||||
medicamentoId: string;
|
||||
loteId: string;
|
||||
mascotaId: string;
|
||||
recetaId?: string;
|
||||
veterinarioId: string;
|
||||
cantidad: number;
|
||||
notas?: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Flujos
|
||||
|
||||
### Recepcion de Medicamentos
|
||||
|
||||
```
|
||||
1. Llega pedido de proveedor
|
||||
2. Verificar factura vs productos
|
||||
3. Para cada producto:
|
||||
- Buscar medicamento en catalogo
|
||||
- Si no existe: crear
|
||||
- Registrar lote:
|
||||
* Numero de lote
|
||||
* Fecha de caducidad
|
||||
* Cantidad
|
||||
* Precio de compra
|
||||
4. Actualizar stock total
|
||||
5. Guardar referencia a factura
|
||||
```
|
||||
|
||||
### Dispensacion
|
||||
|
||||
```
|
||||
1. Veterinario genera receta
|
||||
2. Farmacia recibe receta
|
||||
3. Verificar stock disponible
|
||||
4. Seleccionar lote (FEFO: primero en caducar)
|
||||
5. Descontar cantidad del lote
|
||||
6. Registrar dispensacion
|
||||
7. Si es controlado: registrar en bitacora
|
||||
8. Agregar a cuenta del cliente
|
||||
9. Entregar medicamento
|
||||
```
|
||||
|
||||
### Alertas Automaticas
|
||||
|
||||
```
|
||||
Diario (cron job):
|
||||
|
||||
1. Caducidad proxima:
|
||||
- 30 dias: alerta amarilla
|
||||
- 15 dias: alerta naranja
|
||||
- 7 dias: alerta roja
|
||||
- Vencido: bloquear dispensacion
|
||||
|
||||
2. Stock bajo:
|
||||
- stock_actual <= stock_minimo
|
||||
- Notificar a encargado
|
||||
```
|
||||
|
||||
## Regla FEFO
|
||||
|
||||
```typescript
|
||||
// First Expired, First Out
|
||||
function seleccionarLote(medicamentoId: string, cantidad: number): Lote {
|
||||
const lotes = await this.getLotes(medicamentoId)
|
||||
.filter(l => l.cantidadActual >= cantidad)
|
||||
.filter(l => l.fechaCaducidad > new Date())
|
||||
.sort((a, b) => a.fechaCaducidad - b.fechaCaducidad);
|
||||
|
||||
if (lotes.length === 0) {
|
||||
throw new Error('Stock insuficiente');
|
||||
}
|
||||
|
||||
return lotes[0]; // Primero en caducar
|
||||
}
|
||||
```
|
||||
|
||||
## Medicamentos Controlados
|
||||
|
||||
```typescript
|
||||
interface MedicamentoControlado {
|
||||
medicamentoId: string;
|
||||
requiereBitacora: true;
|
||||
categoriaControlada: 'Fraccion II' | 'Fraccion III' | 'Fraccion IV';
|
||||
registros: RegistroControlado[];
|
||||
}
|
||||
|
||||
interface RegistroControlado {
|
||||
fecha: Date;
|
||||
tipoMovimiento: 'entrada' | 'salida';
|
||||
cantidad: number;
|
||||
lote: string;
|
||||
recetaId?: string;
|
||||
veterinarioId: string;
|
||||
paciente: string; // nombre mascota + propietario
|
||||
justificacion: string;
|
||||
}
|
||||
```
|
||||
|
||||
## Panel de Farmacia
|
||||
|
||||
```
|
||||
┌─────────────────────────────────────────────────────────┐
|
||||
│ FARMACIA - Dashboard │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ ⚠️ ALERTAS │
|
||||
│ ├── 3 productos con stock bajo │
|
||||
│ ├── 5 lotes caducan en 30 dias │
|
||||
│ └── 2 lotes caducan en 7 dias │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ STOCK CRITICO │
|
||||
│ │ Amoxicilina 500mg │ 5 unidades │ Min: 20 │
|
||||
│ │ Meloxicam 1.5mg │ 10 unidades │ Min: 15 │
|
||||
│ │ Complejo B inyectable │ 3 frascos │ Min: 10 │
|
||||
├─────────────────────────────────────────────────────────┤
|
||||
│ PROXIMOS A CADUCAR │
|
||||
│ │ Dexametasona (Lote X123) │ Caduca: 15/01/2026 │
|
||||
│ │ Enrofloxacina (Lote Y456)│ Caduca: 20/01/2026 │
|
||||
└─────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Entregables
|
||||
|
||||
| Entregable | Estado | Archivo |
|
||||
|------------|--------|---------|
|
||||
| DDL medicamentos | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| DDL lotes | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| DDL dispensaciones | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| DDL movimientos | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| DDL bitacora | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| Funciones FEFO | Completado | `database/schemas/02-veterinaria-farmacia-ddl.sql` |
|
||||
| farmacia.module.ts | Pendiente | `backend/modules/farmacia/` |
|
||||
| FarmaciaPanel.tsx | Pendiente | `frontend/components/` |
|
||||
| DispensarForm.tsx | Pendiente | `frontend/components/` |
|
||||
|
||||
## Dependencias
|
||||
|
||||
### Depende de
|
||||
- VET-001 (Mascotas)
|
||||
- clinica.prescriptions (erp-clinicas)
|
||||
- Inventario base (erp-core)
|
||||
|
||||
### Bloquea a
|
||||
- Dispensacion automatica
|
||||
- Reportes de consumo
|
||||
- Integracion proveedores
|
||||
|
||||
## Criterios de Aceptacion
|
||||
|
||||
- [ ] Catalogo de medicamentos
|
||||
- [ ] Control de lotes
|
||||
- [ ] Alertas de caducidad
|
||||
- [ ] Alertas de stock bajo
|
||||
- [ ] Dispensacion funciona
|
||||
- [ ] FEFO se aplica
|
||||
- [ ] Medicamentos controlados registran bitacora
|
||||
|
||||
## Notas
|
||||
|
||||
- DDL completado en Sprint 9 (2026-01-07)
|
||||
- Incluye 5 tablas, 3 ENUMs, 3 funciones y 2 triggers
|
||||
- Implementa regla FEFO (First Expired, First Out)
|
||||
- Incluye bitacora para medicamentos controlados (COFEPRIS)
|
||||
- Puede heredar de inventario base de erp-core
|
||||
- Considerar integracion con modulo de compras
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07 (Sprint 9)
|
||||
193
docs/02-definicion-modulos/_MAP.md
Normal file
193
docs/02-definicion-modulos/_MAP.md
Normal file
@ -0,0 +1,193 @@
|
||||
# Clinica Veterinaria - Mapa de Modulos
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Seccion:** 02-definicion-modulos
|
||||
**Fecha:** 2026-01-07
|
||||
|
||||
---
|
||||
|
||||
## Estructura de Modulos
|
||||
|
||||
```
|
||||
02-definicion-modulos/
|
||||
├── _MAP.md <- ESTE ARCHIVO
|
||||
├── modulo-mascotas.md <- Registro de pacientes
|
||||
├── modulo-propietarios.md <- Duenos de mascotas
|
||||
├── modulo-vacunacion.md <- Cartilla de vacunas
|
||||
├── modulo-consultas.md <- Atencion veterinaria
|
||||
├── modulo-hospitalizacion.md <- Internamiento
|
||||
├── modulo-farmacia.md <- Medicamentos veterinarios
|
||||
├── modulo-estetica.md <- Grooming
|
||||
├── modulo-laboratorio.md <- Analisis clinicos
|
||||
└── modulo-cirugia.md <- Procedimientos quirurgicos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modulos Especializados (Veterinaria)
|
||||
|
||||
### Core - Prioridad P1
|
||||
|
||||
| Modulo | Archivo | Estado | Descripcion |
|
||||
|--------|---------|--------|-------------|
|
||||
| Mascotas | modulo-mascotas.md | EN_PROGRESO | Registro de pacientes animales |
|
||||
| Propietarios | modulo-propietarios.md | PENDIENTE | Gestion de duenos |
|
||||
| Vacunacion | modulo-vacunacion.md | EN_PROGRESO | Cartilla de vacunas por especie |
|
||||
| Consultas | modulo-consultas.md | PENDIENTE | Atencion veterinaria |
|
||||
|
||||
### Especializados - Prioridad P2
|
||||
|
||||
| Modulo | Archivo | Estado | Descripcion |
|
||||
|--------|---------|--------|-------------|
|
||||
| Hospitalizacion | modulo-hospitalizacion.md | PENDIENTE | Internamiento y seguimiento |
|
||||
| Farmacia | modulo-farmacia.md | PENDIENTE | Medicamentos con control de lotes |
|
||||
| Estetica | modulo-estetica.md | PENDIENTE | Bano, corte, grooming |
|
||||
| Laboratorio | modulo-laboratorio.md | PENDIENTE | Analisis clinicos |
|
||||
| Cirugia | modulo-cirugia.md | PENDIENTE | Procedimientos quirurgicos |
|
||||
|
||||
---
|
||||
|
||||
## Modulos Heredados (de erp-clinicas)
|
||||
|
||||
| Modulo | Fuente | Adaptacion |
|
||||
|--------|--------|------------|
|
||||
| Expedientes | erp-clinicas | Adaptar a mascotas (no humanos) |
|
||||
| Citas | erp-clinicas | Sin cambios |
|
||||
| Consultas | erp-clinicas | Signos vitales animales |
|
||||
| Recetas | erp-clinicas | Medicamentos veterinarios |
|
||||
|
||||
---
|
||||
|
||||
## Modulos Heredados (de erp-core)
|
||||
|
||||
| Modulo | Fuente | Adaptacion |
|
||||
|--------|--------|------------|
|
||||
| Autenticacion | erp-core | Sin cambios |
|
||||
| Usuarios | erp-core | Sin cambios |
|
||||
| Roles/Permisos | erp-core | Agregar roles veterinarios |
|
||||
| Facturacion | erp-core | Sin cambios |
|
||||
| Inventario | erp-core | Productos veterinarios |
|
||||
| Catalogos | erp-core | Especies, razas, vacunas |
|
||||
|
||||
---
|
||||
|
||||
## Entidades por Modulo
|
||||
|
||||
### Mascotas
|
||||
- `mascota` - Paciente animal
|
||||
- `especie` - Catalogo de especies
|
||||
- `raza` - Catalogo de razas por especie
|
||||
- `historial_peso` - Registro de pesos
|
||||
|
||||
### Propietarios
|
||||
- `propietario` - Dueno de mascota(s)
|
||||
- `mascota_propietario` - Relacion N:M
|
||||
- `contacto_emergencia` - Contactos adicionales
|
||||
|
||||
### Vacunacion
|
||||
- `vacunacion` - Aplicacion de vacuna
|
||||
- `vacuna` - Catalogo de vacunas
|
||||
- `esquema_vacunacion` - Esquema por especie/edad
|
||||
- `certificado_vacunacion` - Documentos generados
|
||||
|
||||
### Hospitalizacion
|
||||
- `hospitalizacion` - Ingreso
|
||||
- `espacio` - Jaulas, kennels, peceras
|
||||
- `monitoreo` - Signos vitales periodicos
|
||||
- `evolucion` - Notas clinicas
|
||||
|
||||
### Farmacia
|
||||
- `medicamento` - Producto
|
||||
- `lote` - Control de lotes
|
||||
- `movimiento_inventario` - Entradas/salidas
|
||||
- `dispensacion` - Entrega a paciente
|
||||
|
||||
---
|
||||
|
||||
## Relaciones entre Modulos
|
||||
|
||||
```
|
||||
┌─────────────┐
|
||||
│ Propietario │
|
||||
└──────┬──────┘
|
||||
│
|
||||
┌──────▼──────┐
|
||||
│ Mascota │
|
||||
└──────┬──────┘
|
||||
│
|
||||
┌──────────────┬───────┼───────┬──────────────┐
|
||||
│ │ │ │ │
|
||||
┌───▼───┐ ┌──────▼──────┐│ ┌─────▼─────┐ ┌──────▼──────┐
|
||||
│Vacuna-│ │ Citas ││ │Hospitaliza│ │ Estetica │
|
||||
│cion │ └──────┬──────┘│ │cion │ └─────────────┘
|
||||
└───────┘ │ │ └─────┬─────┘
|
||||
│ │ │
|
||||
┌──────▼──────┐│ ┌─────▼─────┐
|
||||
│ Consulta ││ │ Monitoreo │
|
||||
└──────┬──────┘│ └───────────┘
|
||||
│ │
|
||||
┌──────▼──────┐│
|
||||
│ Receta │◄─────────────────┐
|
||||
└──────┬──────┘ │
|
||||
│ │
|
||||
┌──────▼──────┐ ┌──────┴──────┐
|
||||
│ Dispensacion│◄──────────│ Farmacia │
|
||||
└─────────────┘ └─────────────┘
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Especies y Vacunas
|
||||
|
||||
### Caninos (Perros)
|
||||
|
||||
| Vacuna | Edad Inicial | Refuerzo | Frecuencia |
|
||||
|--------|--------------|----------|------------|
|
||||
| Parvovirus | 6 semanas | 8, 12 semanas | Anual |
|
||||
| Quintuple | 8 semanas | 12 semanas | Anual |
|
||||
| Rabia | 16 semanas | - | Anual |
|
||||
| Bordetella | 12 semanas | - | 6 meses |
|
||||
|
||||
### Felinos (Gatos)
|
||||
|
||||
| Vacuna | Edad Inicial | Refuerzo | Frecuencia |
|
||||
|--------|--------------|----------|------------|
|
||||
| Triple Felina | 8 semanas | 12 semanas | Anual |
|
||||
| Leucemia Felina | 12 semanas | 16 semanas | Anual |
|
||||
| Rabia | 16 semanas | - | Anual |
|
||||
|
||||
---
|
||||
|
||||
## Integraciones Externas
|
||||
|
||||
| Sistema | Modulo Relacionado | Prioridad |
|
||||
|---------|-------------------|-----------|
|
||||
| SENASICA | Vacunacion (Rabia) | P1 |
|
||||
| Laboratorios | Laboratorio | P1 |
|
||||
| Proveedores | Farmacia | P2 |
|
||||
|
||||
---
|
||||
|
||||
## Estado de Documentacion
|
||||
|
||||
| Modulo | README | ESPECIFICACION | FLUJOS | TESTS |
|
||||
|--------|--------|----------------|--------|-------|
|
||||
| Mascotas | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE |
|
||||
| Propietarios | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE |
|
||||
| Vacunacion | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE |
|
||||
| Hospitalizacion | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE |
|
||||
| Farmacia | PENDIENTE | PENDIENTE | PENDIENTE | PENDIENTE |
|
||||
|
||||
---
|
||||
|
||||
## Proximos Pasos
|
||||
|
||||
1. **Completar modulo-mascotas.md** - Especificacion completa
|
||||
2. **Documentar modulo-vacunacion.md** - Esquemas por especie
|
||||
3. **Definir entidades** en DATABASE_INVENTORY.yml
|
||||
4. **Crear User Stories** para Sprint 1
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
**Version:** 1.0.0
|
||||
697
docs/02-definicion-modulos/modulo-mascotas.md
Normal file
697
docs/02-definicion-modulos/modulo-mascotas.md
Normal file
@ -0,0 +1,697 @@
|
||||
# Modulo Mascotas
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Modulo:** VET-001
|
||||
**Prioridad:** P1 - Core
|
||||
**Estado:** Especificacion
|
||||
**Fecha:** 2026-01-07
|
||||
|
||||
---
|
||||
|
||||
## 1. DESCRIPCION GENERAL
|
||||
|
||||
El modulo de Mascotas es el nucleo del sistema veterinario. Gestiona el registro de pacientes animales, su vinculacion con propietarios, datos clinicos basicos y seguimiento de peso/estado.
|
||||
|
||||
### Proposito
|
||||
- Registro completo de datos de cada mascota
|
||||
- Vinculacion con propietarios (1 o multiples)
|
||||
- Historial de pesos y mediciones
|
||||
- Identificacion por microchip
|
||||
- Base para expediente clinico
|
||||
|
||||
### Alcance
|
||||
- Multiples especies (canino, felino, aves, exoticos)
|
||||
- Razas por especie
|
||||
- Datos de identificacion (microchip)
|
||||
- Estado reproductivo (esterilizado/entero)
|
||||
- Fotos de identificacion
|
||||
- Estados (activo, fallecido, perdido)
|
||||
|
||||
---
|
||||
|
||||
## 2. ENTIDADES
|
||||
|
||||
### 2.1 especie
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.especies
|
||||
descripcion: "Catalogo de especies soportadas"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: codigo
|
||||
tipo: VARCHAR(10)
|
||||
unique: true
|
||||
not_null: true
|
||||
descripcion: "CAN, FEL, AVE, REP, ROE, PEZ, EXO"
|
||||
|
||||
- nombre: nombre
|
||||
tipo: VARCHAR(100)
|
||||
not_null: true
|
||||
descripcion: "Canino, Felino, Ave, etc"
|
||||
|
||||
- nombre: nombre_cientifico
|
||||
tipo: VARCHAR(200)
|
||||
descripcion: "Nombre cientifico"
|
||||
|
||||
- nombre: tiene_vacunas
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
descripcion: "Si tiene esquema de vacunacion"
|
||||
|
||||
- nombre: activo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
seeds:
|
||||
- {codigo: 'CAN', nombre: 'Canino (Perro)', tiene_vacunas: true}
|
||||
- {codigo: 'FEL', nombre: 'Felino (Gato)', tiene_vacunas: true}
|
||||
- {codigo: 'AVE', nombre: 'Ave', tiene_vacunas: true}
|
||||
- {codigo: 'REP', nombre: 'Reptil', tiene_vacunas: false}
|
||||
- {codigo: 'ROE', nombre: 'Roedor', tiene_vacunas: false}
|
||||
- {codigo: 'PEZ', nombre: 'Pez', tiene_vacunas: false}
|
||||
- {codigo: 'EXO', nombre: 'Exotico', tiene_vacunas: true}
|
||||
```
|
||||
|
||||
### 2.2 raza
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.razas
|
||||
descripcion: "Catalogo de razas por especie"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: especie_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.especies(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: nombre
|
||||
tipo: VARCHAR(100)
|
||||
not_null: true
|
||||
descripcion: "Nombre de la raza"
|
||||
|
||||
- nombre: tamano
|
||||
tipo: ENUM
|
||||
valores: ['miniatura', 'pequeno', 'mediano', 'grande', 'gigante']
|
||||
descripcion: "Tamano tipico de la raza"
|
||||
|
||||
- nombre: peso_promedio_kg
|
||||
tipo: DECIMAL(5,2)
|
||||
descripcion: "Peso promedio adulto"
|
||||
|
||||
- nombre: esperanza_vida_anos
|
||||
tipo: INTEGER
|
||||
descripcion: "Anos de vida promedio"
|
||||
|
||||
- nombre: activo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
indices:
|
||||
- nombre: idx_raza_especie
|
||||
campos: [especie_id]
|
||||
- nombre: uk_raza_especie_nombre
|
||||
campos: [especie_id, nombre]
|
||||
unique: true
|
||||
|
||||
seeds_caninos:
|
||||
- {nombre: 'Labrador Retriever', tamano: 'grande', peso_promedio: 30}
|
||||
- {nombre: 'Pastor Aleman', tamano: 'grande', peso_promedio: 35}
|
||||
- {nombre: 'Golden Retriever', tamano: 'grande', peso_promedio: 32}
|
||||
- {nombre: 'Chihuahua', tamano: 'miniatura', peso_promedio: 2}
|
||||
- {nombre: 'Bulldog Frances', tamano: 'pequeno', peso_promedio: 12}
|
||||
- {nombre: 'Poodle', tamano: 'mediano', peso_promedio: 20}
|
||||
- {nombre: 'Mestizo', tamano: 'mediano', peso_promedio: 15}
|
||||
|
||||
seeds_felinos:
|
||||
- {nombre: 'Persa', tamano: 'mediano', peso_promedio: 5}
|
||||
- {nombre: 'Siames', tamano: 'mediano', peso_promedio: 4}
|
||||
- {nombre: 'Maine Coon', tamano: 'grande', peso_promedio: 8}
|
||||
- {nombre: 'Comun Europeo', tamano: 'mediano', peso_promedio: 4}
|
||||
- {nombre: 'Mestizo', tamano: 'mediano', peso_promedio: 4}
|
||||
```
|
||||
|
||||
### 2.3 mascota
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.mascotas
|
||||
descripcion: "Registro de pacientes animales"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: tenant_id
|
||||
tipo: UUID
|
||||
not_null: true
|
||||
descripcion: "Multi-tenant"
|
||||
|
||||
- nombre: nombre
|
||||
tipo: VARCHAR(100)
|
||||
not_null: true
|
||||
descripcion: "Nombre de la mascota"
|
||||
|
||||
- nombre: especie_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.especies(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: raza_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.razas(id)
|
||||
descripcion: "Raza (opcional si es mestizo)"
|
||||
|
||||
- nombre: sexo
|
||||
tipo: ENUM
|
||||
valores: ['macho', 'hembra']
|
||||
not_null: true
|
||||
|
||||
- nombre: fecha_nacimiento
|
||||
tipo: DATE
|
||||
descripcion: "Fecha exacta o aproximada"
|
||||
|
||||
- nombre: fecha_nacimiento_aproximada
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
descripcion: "Si la fecha es aproximada"
|
||||
|
||||
- nombre: color
|
||||
tipo: VARCHAR(100)
|
||||
descripcion: "Color de pelaje/plumaje"
|
||||
|
||||
- nombre: peso_actual_kg
|
||||
tipo: DECIMAL(6,2)
|
||||
descripcion: "Ultimo peso registrado"
|
||||
|
||||
- nombre: peso_fecha
|
||||
tipo: DATE
|
||||
descripcion: "Fecha del ultimo peso"
|
||||
|
||||
- nombre: microchip
|
||||
tipo: VARCHAR(50)
|
||||
unique: true
|
||||
descripcion: "Numero de microchip"
|
||||
|
||||
- nombre: microchip_fecha
|
||||
tipo: DATE
|
||||
descripcion: "Fecha de colocacion"
|
||||
|
||||
- nombre: esterilizado
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
|
||||
- nombre: fecha_esterilizacion
|
||||
tipo: DATE
|
||||
|
||||
- nombre: foto_url
|
||||
tipo: VARCHAR(500)
|
||||
descripcion: "URL de foto principal"
|
||||
|
||||
- nombre: caracteristicas_especiales
|
||||
tipo: TEXT
|
||||
descripcion: "Marcas, cicatrices, etc"
|
||||
|
||||
- nombre: alergias
|
||||
tipo: TEXT[]
|
||||
descripcion: "Lista de alergias conocidas"
|
||||
|
||||
- nombre: condiciones_cronicas
|
||||
tipo: TEXT[]
|
||||
descripcion: "Enfermedades cronicas"
|
||||
|
||||
- nombre: estado
|
||||
tipo: ENUM
|
||||
valores: ['activo', 'fallecido', 'perdido', 'dado_de_baja', 'referido']
|
||||
default: 'activo'
|
||||
|
||||
- nombre: fecha_fallecimiento
|
||||
tipo: DATE
|
||||
|
||||
- nombre: causa_fallecimiento
|
||||
tipo: TEXT
|
||||
|
||||
- nombre: notas
|
||||
tipo: TEXT
|
||||
descripcion: "Observaciones generales"
|
||||
|
||||
- nombre: created_at
|
||||
tipo: TIMESTAMP
|
||||
default: NOW()
|
||||
|
||||
- nombre: updated_at
|
||||
tipo: TIMESTAMP
|
||||
|
||||
indices:
|
||||
- nombre: idx_mascota_tenant
|
||||
campos: [tenant_id]
|
||||
- nombre: idx_mascota_especie
|
||||
campos: [especie_id]
|
||||
- nombre: idx_mascota_microchip
|
||||
campos: [microchip]
|
||||
where: "microchip IS NOT NULL"
|
||||
- nombre: idx_mascota_nombre
|
||||
campos: [tenant_id, nombre]
|
||||
|
||||
rls:
|
||||
- policy: "tenant_isolation"
|
||||
using: "tenant_id = current_tenant_id()"
|
||||
```
|
||||
|
||||
### 2.4 mascota_propietario
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.mascotas_propietarios
|
||||
descripcion: "Relacion N:M entre mascotas y propietarios"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: mascota_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.mascotas(id)
|
||||
not_null: true
|
||||
on_delete: CASCADE
|
||||
|
||||
- nombre: propietario_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.propietarios(id)
|
||||
not_null: true
|
||||
on_delete: CASCADE
|
||||
|
||||
- nombre: es_principal
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
descripcion: "Si es el propietario principal"
|
||||
|
||||
- nombre: parentesco
|
||||
tipo: VARCHAR(50)
|
||||
descripcion: "Relacion: dueno, familiar, cuidador"
|
||||
|
||||
- nombre: fecha_desde
|
||||
tipo: DATE
|
||||
default: CURRENT_DATE
|
||||
|
||||
- nombre: fecha_hasta
|
||||
tipo: DATE
|
||||
descripcion: "Si dejo de ser propietario"
|
||||
|
||||
- nombre: activo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
indices:
|
||||
- nombre: uk_mascota_propietario
|
||||
campos: [mascota_id, propietario_id]
|
||||
unique: true
|
||||
- nombre: idx_mp_propietario
|
||||
campos: [propietario_id]
|
||||
```
|
||||
|
||||
### 2.5 historial_peso
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.historial_pesos
|
||||
descripcion: "Registro historico de pesos"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: mascota_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.mascotas(id)
|
||||
not_null: true
|
||||
on_delete: CASCADE
|
||||
|
||||
- nombre: peso_kg
|
||||
tipo: DECIMAL(6,2)
|
||||
not_null: true
|
||||
|
||||
- nombre: fecha_registro
|
||||
tipo: TIMESTAMP
|
||||
default: NOW()
|
||||
|
||||
- nombre: registrado_por
|
||||
tipo: UUID
|
||||
fk: core.usuarios(id)
|
||||
|
||||
- nombre: notas
|
||||
tipo: TEXT
|
||||
descripcion: "Observaciones (dieta, enfermedad, etc)"
|
||||
|
||||
indices:
|
||||
- nombre: idx_historial_peso_mascota
|
||||
campos: [mascota_id]
|
||||
- nombre: idx_historial_peso_fecha
|
||||
campos: [mascota_id, fecha_registro DESC]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. API ENDPOINTS
|
||||
|
||||
### Mascotas
|
||||
|
||||
```yaml
|
||||
endpoints:
|
||||
- method: GET
|
||||
path: /api/v1/mascotas
|
||||
descripcion: "Listar mascotas del tenant"
|
||||
query:
|
||||
especie: string (filtro)
|
||||
estado: string (filtro)
|
||||
propietario_id: string (filtro)
|
||||
search: string (nombre, microchip)
|
||||
page: number
|
||||
limit: number
|
||||
response: PaginatedResponse<Mascota>
|
||||
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/{id}
|
||||
descripcion: "Obtener mascota por ID"
|
||||
response: Mascota con propietarios y ultimo peso
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/mascotas
|
||||
descripcion: "Registrar nueva mascota"
|
||||
body:
|
||||
nombre: string (requerido)
|
||||
especie_id: string (requerido)
|
||||
raza_id: string (opcional)
|
||||
sexo: string (requerido)
|
||||
fecha_nacimiento: date (opcional)
|
||||
color: string
|
||||
peso_kg: number
|
||||
microchip: string
|
||||
esterilizado: boolean
|
||||
propietario_id: string (requerido, al menos uno)
|
||||
foto_url: string
|
||||
notas: string
|
||||
response: Mascota creada
|
||||
|
||||
- method: PUT
|
||||
path: /api/v1/mascotas/{id}
|
||||
descripcion: "Actualizar datos de mascota"
|
||||
body: Campos actualizables
|
||||
response: Mascota actualizada
|
||||
|
||||
- method: PATCH
|
||||
path: /api/v1/mascotas/{id}/estado
|
||||
descripcion: "Cambiar estado (fallecido, perdido, etc)"
|
||||
body:
|
||||
estado: string
|
||||
fecha: date
|
||||
motivo: string
|
||||
response: Mascota actualizada
|
||||
|
||||
- method: DELETE
|
||||
path: /api/v1/mascotas/{id}
|
||||
descripcion: "Dar de baja mascota (soft delete)"
|
||||
response: 204 No Content
|
||||
```
|
||||
|
||||
### Busqueda por Microchip
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/microchip/{numero}
|
||||
descripcion: "Buscar por numero de microchip"
|
||||
response: Mascota o 404
|
||||
```
|
||||
|
||||
### Historial de Peso
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/{id}/pesos
|
||||
descripcion: "Historial de pesos"
|
||||
query:
|
||||
desde: date
|
||||
hasta: date
|
||||
response: Array de registros de peso
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/mascotas/{id}/pesos
|
||||
descripcion: "Registrar nuevo peso"
|
||||
body:
|
||||
peso_kg: number (requerido)
|
||||
notas: string
|
||||
response: Registro de peso + mascota actualizada
|
||||
```
|
||||
|
||||
### Propietarios de Mascota
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/{id}/propietarios
|
||||
descripcion: "Propietarios vinculados"
|
||||
response: Array de propietarios
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/mascotas/{id}/propietarios
|
||||
descripcion: "Vincular propietario adicional"
|
||||
body:
|
||||
propietario_id: string
|
||||
es_principal: boolean
|
||||
parentesco: string
|
||||
response: Relacion creada
|
||||
|
||||
- method: DELETE
|
||||
path: /api/v1/mascotas/{id}/propietarios/{propietarioId}
|
||||
descripcion: "Desvincular propietario"
|
||||
response: 204 No Content
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. FLUJOS DE USUARIO
|
||||
|
||||
### 4.1 Registro de Nueva Mascota
|
||||
|
||||
```
|
||||
1. Recepcionista busca propietario existente o lo crea
|
||||
2. Click en "Nueva Mascota"
|
||||
3. Formulario de datos basicos:
|
||||
- Nombre
|
||||
- Especie (dropdown)
|
||||
- Raza (dropdown filtrado por especie)
|
||||
- Sexo
|
||||
- Fecha nacimiento (con checkbox "aproximada")
|
||||
- Color
|
||||
- Peso actual
|
||||
4. Datos de identificacion:
|
||||
- Microchip (si tiene)
|
||||
- Esterilizado (si/no + fecha)
|
||||
5. Foto (opcional)
|
||||
6. Notas adicionales
|
||||
7. Guardar
|
||||
8. Sistema vincula con propietario automaticamente
|
||||
```
|
||||
|
||||
### 4.2 Busqueda de Mascota
|
||||
|
||||
```
|
||||
1. Campo de busqueda en header
|
||||
2. Escribir nombre, microchip o nombre de propietario
|
||||
3. Resultados en tiempo real
|
||||
4. Click en resultado para abrir expediente
|
||||
5. Alternativa: Escanear codigo de microchip
|
||||
```
|
||||
|
||||
### 4.3 Registro de Peso en Consulta
|
||||
|
||||
```
|
||||
1. Al iniciar consulta, sistema pide peso
|
||||
2. Auxiliar pesa a la mascota
|
||||
3. Ingresa peso en sistema
|
||||
4. Sistema muestra grafica de historico
|
||||
5. Alerta si hay variacion significativa (>10%)
|
||||
6. Peso se asocia a la consulta
|
||||
```
|
||||
|
||||
### 4.4 Fallecimiento de Mascota
|
||||
|
||||
```
|
||||
1. Abrir expediente de mascota
|
||||
2. Menu: "Cambiar estado" > "Fallecido"
|
||||
3. Formulario:
|
||||
- Fecha de fallecimiento
|
||||
- Causa (libre o catalogo)
|
||||
- Lugar (clinica, domicilio, otro)
|
||||
- Notas
|
||||
4. Confirmacion con mensaje de condolencias
|
||||
5. Sistema actualiza estado
|
||||
6. Mascota aparece en seccion "Inactivos"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. COMPONENTES UI
|
||||
|
||||
### 5.1 MascotaCard
|
||||
|
||||
```typescript
|
||||
interface MascotaCardProps {
|
||||
mascota: Mascota;
|
||||
showPropietario?: boolean;
|
||||
onClick?: () => void;
|
||||
}
|
||||
|
||||
// Muestra foto, nombre, especie, raza, edad
|
||||
// Badge de estado (activo, fallecido, etc)
|
||||
// Iconos de vacunas, alergias si aplica
|
||||
```
|
||||
|
||||
### 5.2 MascotaForm
|
||||
|
||||
```typescript
|
||||
interface MascotaFormProps {
|
||||
mascota?: Mascota; // Para edicion
|
||||
propietarioId?: string; // Precarga propietario
|
||||
onSave: (mascota: Mascota) => void;
|
||||
onCancel: () => void;
|
||||
}
|
||||
|
||||
// Wizard de pasos o formulario largo
|
||||
// Validaciones en tiempo real
|
||||
// Preview de foto
|
||||
```
|
||||
|
||||
### 5.3 PesoChart
|
||||
|
||||
```typescript
|
||||
interface PesoChartProps {
|
||||
mascotaId: string;
|
||||
periodoMeses?: number;
|
||||
}
|
||||
|
||||
// Grafica de linea con historico de peso
|
||||
// Linea de peso ideal segun raza
|
||||
// Tooltips con fechas y valores
|
||||
```
|
||||
|
||||
### 5.4 MascotaExpediente
|
||||
|
||||
```typescript
|
||||
interface MascotaExpedienteProps {
|
||||
mascotaId: string;
|
||||
}
|
||||
|
||||
// Vista completa del expediente
|
||||
// Tabs: Datos, Vacunas, Consultas, Hospitalizaciones
|
||||
// Timeline de eventos
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. VALIDACIONES
|
||||
|
||||
### Reglas de Negocio
|
||||
|
||||
```yaml
|
||||
validaciones:
|
||||
- regla: "Microchip unico en el tenant"
|
||||
condicion: microchip duplicado
|
||||
error: "Este numero de microchip ya esta registrado"
|
||||
|
||||
- regla: "Raza debe corresponder a especie"
|
||||
condicion: raza.especie_id != mascota.especie_id
|
||||
error: "La raza seleccionada no corresponde a la especie"
|
||||
|
||||
- regla: "Fecha nacimiento no puede ser futura"
|
||||
condicion: fecha_nacimiento > today()
|
||||
error: "La fecha de nacimiento no puede ser en el futuro"
|
||||
|
||||
- regla: "Peso debe ser positivo"
|
||||
condicion: peso_kg <= 0
|
||||
error: "El peso debe ser mayor a 0"
|
||||
|
||||
- regla: "Al menos un propietario"
|
||||
condicion: propietarios.length == 0
|
||||
error: "La mascota debe tener al menos un propietario"
|
||||
|
||||
- regla: "Solo un propietario principal"
|
||||
condicion: propietarios.filter(p => p.es_principal).length > 1
|
||||
error: "Solo puede haber un propietario principal"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. CASOS DE USO
|
||||
|
||||
### CU-VET-001: Registro de Mascota Nueva
|
||||
|
||||
**Actor:** Recepcionista / Veterinario
|
||||
**Precondición:** Propietario registrado en sistema
|
||||
**Flujo:**
|
||||
1. Seleccionar propietario
|
||||
2. Click "Nueva Mascota"
|
||||
3. Completar datos obligatorios
|
||||
4. Agregar foto (opcional)
|
||||
5. Guardar
|
||||
**Postcondición:** Mascota registrada, vinculada a propietario
|
||||
|
||||
### CU-VET-002: Busqueda por Microchip
|
||||
|
||||
**Actor:** Cualquier usuario
|
||||
**Precondición:** Mascota con microchip registrado
|
||||
**Flujo:**
|
||||
1. Escanear o ingresar numero de microchip
|
||||
2. Sistema busca en base de datos
|
||||
3. Mostrar mascota encontrada
|
||||
**Postcondición:** Acceso rapido al expediente
|
||||
|
||||
### CU-VET-003: Actualizacion de Peso
|
||||
|
||||
**Actor:** Auxiliar / Veterinario
|
||||
**Precondición:** Mascota en consulta
|
||||
**Flujo:**
|
||||
1. Pesar mascota
|
||||
2. Ingresar peso en sistema
|
||||
3. Sistema calcula diferencia vs anterior
|
||||
4. Mostrar alerta si variacion > 10%
|
||||
5. Guardar con notas si aplica
|
||||
**Postcondición:** Peso registrado, historial actualizado
|
||||
|
||||
---
|
||||
|
||||
## 8. DEPENDENCIAS
|
||||
|
||||
### Depende de
|
||||
- `veterinaria.propietarios` - Duenos de mascotas
|
||||
- `core.usuarios` - Quien registra
|
||||
- `core.tenants` - Multi-tenant
|
||||
|
||||
### Dependientes
|
||||
- `veterinaria.vacunaciones` - Cartilla de vacunas
|
||||
- `veterinaria.consultas` - Historia clinica
|
||||
- `veterinaria.hospitalizaciones` - Ingresos
|
||||
- `veterinaria.facturas` - Facturacion
|
||||
|
||||
---
|
||||
|
||||
## 9. METRICAS
|
||||
|
||||
| Metrica | Descripcion | Query |
|
||||
|---------|-------------|-------|
|
||||
| Total mascotas | Mascotas activas | `WHERE estado = 'activo'` |
|
||||
| Por especie | Distribucion | `GROUP BY especie_id` |
|
||||
| Nuevas/mes | Registros mensuales | `WHERE created_at >= ?` |
|
||||
| Tasa mortalidad | Fallecidos / total | Calculo |
|
||||
|
||||
---
|
||||
|
||||
**Documento creado:** 2026-01-07
|
||||
**Autor:** Agente Orquestador Workspace
|
||||
**Version:** 1.0.0
|
||||
744
docs/02-definicion-modulos/modulo-vacunacion.md
Normal file
744
docs/02-definicion-modulos/modulo-vacunacion.md
Normal file
@ -0,0 +1,744 @@
|
||||
# Modulo Vacunacion
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Modulo:** VET-002
|
||||
**Prioridad:** P1 - Core
|
||||
**Estado:** Especificacion
|
||||
**Fecha:** 2026-01-07
|
||||
|
||||
---
|
||||
|
||||
## 1. DESCRIPCION GENERAL
|
||||
|
||||
El modulo de Vacunacion gestiona la cartilla digital de vacunas de cada mascota, incluyendo esquemas por especie/edad, recordatorios automaticos, control de lotes y generacion de certificados para SENASICA.
|
||||
|
||||
### Proposito
|
||||
- Registro de vacunas aplicadas
|
||||
- Esquemas automaticos por especie
|
||||
- Alertas de proximas vacunas
|
||||
- Control de lotes y caducidad
|
||||
- Certificados oficiales
|
||||
- Reporte a SENASICA (rabia)
|
||||
|
||||
### Alcance
|
||||
- Todas las especies con vacunas
|
||||
- Esquemas personalizables
|
||||
- Recordatorios multicanal (email, SMS, push)
|
||||
- Integracion con SENASICA
|
||||
- Historial completo de inmunizaciones
|
||||
|
||||
---
|
||||
|
||||
## 2. ENTIDADES
|
||||
|
||||
### 2.1 vacuna (catalogo)
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.vacunas
|
||||
descripcion: "Catalogo de vacunas disponibles"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: tenant_id
|
||||
tipo: UUID
|
||||
not_null: true
|
||||
descripcion: "Null para vacunas globales"
|
||||
|
||||
- nombre: codigo
|
||||
tipo: VARCHAR(20)
|
||||
unique: true
|
||||
descripcion: "Codigo interno"
|
||||
|
||||
- nombre: nombre
|
||||
tipo: VARCHAR(200)
|
||||
not_null: true
|
||||
descripcion: "Nombre comercial"
|
||||
|
||||
- nombre: nombre_generico
|
||||
tipo: VARCHAR(200)
|
||||
descripcion: "Nombre generico/principio activo"
|
||||
|
||||
- nombre: fabricante
|
||||
tipo: VARCHAR(100)
|
||||
|
||||
- nombre: especies_aplicables
|
||||
tipo: UUID[]
|
||||
descripcion: "Array de IDs de especies"
|
||||
|
||||
- nombre: enfermedades_previene
|
||||
tipo: TEXT[]
|
||||
descripcion: "Enfermedades que previene"
|
||||
|
||||
- nombre: via_administracion
|
||||
tipo: ENUM
|
||||
valores: ['subcutanea', 'intramuscular', 'intranasal', 'oral']
|
||||
|
||||
- nombre: dosis_ml
|
||||
tipo: DECIMAL(4,2)
|
||||
descripcion: "Dosis estandar en ml"
|
||||
|
||||
- nombre: requiere_refuerzo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
- nombre: intervalo_refuerzo_dias
|
||||
tipo: INTEGER
|
||||
descripcion: "Dias entre aplicaciones"
|
||||
|
||||
- nombre: intervalo_anual_dias
|
||||
tipo: INTEGER
|
||||
default: 365
|
||||
descripcion: "Frecuencia de refuerzo anual"
|
||||
|
||||
- nombre: edad_minima_semanas
|
||||
tipo: INTEGER
|
||||
descripcion: "Edad minima para aplicar"
|
||||
|
||||
- nombre: obligatoria
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
descripcion: "Si es obligatoria por ley"
|
||||
|
||||
- nombre: reportar_senasica
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
descripcion: "Si debe reportarse a SENASICA"
|
||||
|
||||
- nombre: precio_sugerido
|
||||
tipo: DECIMAL(10,2)
|
||||
|
||||
- nombre: activo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
indices:
|
||||
- nombre: idx_vacuna_especies
|
||||
tipo: GIN
|
||||
campos: [especies_aplicables]
|
||||
- nombre: idx_vacuna_senasica
|
||||
campos: [reportar_senasica]
|
||||
where: "reportar_senasica = true"
|
||||
|
||||
seeds:
|
||||
# Caninos
|
||||
- {codigo: 'PARVO', nombre: 'Parvovirus Canino', especies: ['CAN'], obligatoria: false}
|
||||
- {codigo: 'MOQUILLO', nombre: 'Moquillo Canino', especies: ['CAN'], obligatoria: false}
|
||||
- {codigo: 'QUINTUPLE', nombre: 'Quintuple Canina', especies: ['CAN'], obligatoria: false}
|
||||
- {codigo: 'RABIA_CAN', nombre: 'Rabia Canina', especies: ['CAN'], obligatoria: true, reportar_senasica: true}
|
||||
- {codigo: 'BORDETELLA', nombre: 'Bordetella (Tos de Perrera)', especies: ['CAN'], obligatoria: false}
|
||||
|
||||
# Felinos
|
||||
- {codigo: 'TRIPLE_FEL', nombre: 'Triple Felina', especies: ['FEL'], obligatoria: false}
|
||||
- {codigo: 'LEUCEMIA', nombre: 'Leucemia Felina', especies: ['FEL'], obligatoria: false}
|
||||
- {codigo: 'RABIA_FEL', nombre: 'Rabia Felina', especies: ['FEL'], obligatoria: true, reportar_senasica: true}
|
||||
```
|
||||
|
||||
### 2.2 esquema_vacunacion
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.esquemas_vacunacion
|
||||
descripcion: "Esquemas de vacunacion por especie/edad"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: especie_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.especies(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: nombre
|
||||
tipo: VARCHAR(100)
|
||||
not_null: true
|
||||
descripcion: "Ej: Cachorro, Adulto, Senior"
|
||||
|
||||
- nombre: edad_inicio_semanas
|
||||
tipo: INTEGER
|
||||
descripcion: "Edad minima en semanas"
|
||||
|
||||
- nombre: edad_fin_semanas
|
||||
tipo: INTEGER
|
||||
descripcion: "Edad maxima en semanas (null = sin limite)"
|
||||
|
||||
- nombre: descripcion
|
||||
tipo: TEXT
|
||||
|
||||
- nombre: activo
|
||||
tipo: BOOLEAN
|
||||
default: true
|
||||
|
||||
seeds:
|
||||
- {especie: 'CAN', nombre: 'Cachorro (0-16 sem)', edad_inicio: 0, edad_fin: 16}
|
||||
- {especie: 'CAN', nombre: 'Adulto (16+ sem)', edad_inicio: 16, edad_fin: null}
|
||||
- {especie: 'FEL', nombre: 'Gatito (0-16 sem)', edad_inicio: 0, edad_fin: 16}
|
||||
- {especie: 'FEL', nombre: 'Adulto (16+ sem)', edad_inicio: 16, edad_fin: null}
|
||||
```
|
||||
|
||||
### 2.3 esquema_vacuna_detalle
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.esquema_vacuna_detalle
|
||||
descripcion: "Vacunas incluidas en cada esquema"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: esquema_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.esquemas_vacunacion(id)
|
||||
not_null: true
|
||||
on_delete: CASCADE
|
||||
|
||||
- nombre: vacuna_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.vacunas(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: semana_aplicacion
|
||||
tipo: INTEGER
|
||||
descripcion: "Semana de edad para aplicar"
|
||||
|
||||
- nombre: orden
|
||||
tipo: INTEGER
|
||||
descripcion: "Orden de prioridad"
|
||||
|
||||
- nombre: es_refuerzo
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
descripcion: "Si es refuerzo de aplicacion anterior"
|
||||
|
||||
indices:
|
||||
- nombre: uk_esquema_vacuna
|
||||
campos: [esquema_id, vacuna_id, semana_aplicacion]
|
||||
unique: true
|
||||
|
||||
seeds_cachorro:
|
||||
# Esquema cachorro canino
|
||||
- {esquema: 'Cachorro', vacuna: 'PARVO', semana: 6, orden: 1}
|
||||
- {esquema: 'Cachorro', vacuna: 'QUINTUPLE', semana: 8, orden: 2}
|
||||
- {esquema: 'Cachorro', vacuna: 'QUINTUPLE', semana: 12, orden: 3, es_refuerzo: true}
|
||||
- {esquema: 'Cachorro', vacuna: 'RABIA_CAN', semana: 16, orden: 4}
|
||||
```
|
||||
|
||||
### 2.4 vacunacion (aplicacion)
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.vacunaciones
|
||||
descripcion: "Registro de vacunas aplicadas"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: tenant_id
|
||||
tipo: UUID
|
||||
not_null: true
|
||||
|
||||
- nombre: mascota_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.mascotas(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: vacuna_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.vacunas(id)
|
||||
not_null: true
|
||||
|
||||
- nombre: fecha_aplicacion
|
||||
tipo: DATE
|
||||
not_null: true
|
||||
|
||||
- nombre: fecha_proxima
|
||||
tipo: DATE
|
||||
descripcion: "Fecha sugerida de proxima aplicacion"
|
||||
|
||||
- nombre: lote
|
||||
tipo: VARCHAR(50)
|
||||
descripcion: "Numero de lote"
|
||||
|
||||
- nombre: fecha_caducidad_lote
|
||||
tipo: DATE
|
||||
descripcion: "Caducidad del lote usado"
|
||||
|
||||
- nombre: fabricante
|
||||
tipo: VARCHAR(100)
|
||||
|
||||
- nombre: veterinario_id
|
||||
tipo: UUID
|
||||
fk: core.usuarios(id)
|
||||
not_null: true
|
||||
descripcion: "Quien aplico"
|
||||
|
||||
- nombre: cedula_veterinario
|
||||
tipo: VARCHAR(20)
|
||||
descripcion: "Cedula profesional (para certificados)"
|
||||
|
||||
- nombre: consulta_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.consultas(id)
|
||||
descripcion: "Consulta donde se aplico (si aplica)"
|
||||
|
||||
- nombre: dosis_aplicada_ml
|
||||
tipo: DECIMAL(4,2)
|
||||
|
||||
- nombre: via_administracion
|
||||
tipo: ENUM
|
||||
valores: ['subcutanea', 'intramuscular', 'intranasal', 'oral']
|
||||
|
||||
- nombre: sitio_aplicacion
|
||||
tipo: VARCHAR(50)
|
||||
descripcion: "Ej: muslo derecho, escapula"
|
||||
|
||||
- nombre: reaccion_adversa
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
|
||||
- nombre: descripcion_reaccion
|
||||
tipo: TEXT
|
||||
|
||||
- nombre: costo
|
||||
tipo: DECIMAL(10,2)
|
||||
|
||||
- nombre: certificado_generado
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
|
||||
- nombre: certificado_url
|
||||
tipo: VARCHAR(500)
|
||||
|
||||
- nombre: reportado_senasica
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
|
||||
- nombre: fecha_reporte_senasica
|
||||
tipo: TIMESTAMP
|
||||
|
||||
- nombre: notas
|
||||
tipo: TEXT
|
||||
|
||||
- nombre: created_at
|
||||
tipo: TIMESTAMP
|
||||
default: NOW()
|
||||
|
||||
indices:
|
||||
- nombre: idx_vacunacion_mascota
|
||||
campos: [mascota_id]
|
||||
- nombre: idx_vacunacion_fecha
|
||||
campos: [fecha_aplicacion DESC]
|
||||
- nombre: idx_vacunacion_proxima
|
||||
campos: [fecha_proxima]
|
||||
where: "fecha_proxima IS NOT NULL"
|
||||
- nombre: idx_vacunacion_senasica
|
||||
campos: [reportado_senasica, fecha_aplicacion]
|
||||
where: "reportado_senasica = false"
|
||||
|
||||
rls:
|
||||
- policy: "tenant_isolation"
|
||||
using: "tenant_id = current_tenant_id()"
|
||||
```
|
||||
|
||||
### 2.5 recordatorio_vacuna
|
||||
|
||||
```yaml
|
||||
tabla: veterinaria.recordatorios_vacunas
|
||||
descripcion: "Recordatorios programados"
|
||||
|
||||
campos:
|
||||
- nombre: id
|
||||
tipo: UUID
|
||||
pk: true
|
||||
|
||||
- nombre: vacunacion_id
|
||||
tipo: UUID
|
||||
fk: veterinaria.vacunaciones(id)
|
||||
not_null: true
|
||||
on_delete: CASCADE
|
||||
descripcion: "Vacunacion de referencia"
|
||||
|
||||
- nombre: fecha_recordatorio
|
||||
tipo: DATE
|
||||
not_null: true
|
||||
descripcion: "Fecha para enviar recordatorio"
|
||||
|
||||
- nombre: tipo
|
||||
tipo: ENUM
|
||||
valores: ['7_dias_antes', '3_dias_antes', '1_dia_antes', 'dia_programado', 'vencido']
|
||||
|
||||
- nombre: canal
|
||||
tipo: ENUM
|
||||
valores: ['email', 'sms', 'push', 'whatsapp']
|
||||
|
||||
- nombre: enviado
|
||||
tipo: BOOLEAN
|
||||
default: false
|
||||
|
||||
- nombre: fecha_envio
|
||||
tipo: TIMESTAMP
|
||||
|
||||
- nombre: error_envio
|
||||
tipo: TEXT
|
||||
|
||||
indices:
|
||||
- nombre: idx_recordatorio_fecha
|
||||
campos: [fecha_recordatorio]
|
||||
where: "enviado = false"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 3. ESQUEMAS DE VACUNACION
|
||||
|
||||
### 3.1 Caninos (Perros)
|
||||
|
||||
```yaml
|
||||
cachorro_canino:
|
||||
- semana_6:
|
||||
vacuna: "Parvovirus"
|
||||
nota: "Primera vacuna"
|
||||
- semana_8:
|
||||
vacuna: "Quintuple (Parvovirus, Moquillo, Hepatitis, Parainfluenza, Leptospirosis)"
|
||||
nota: "Inicio de esquema completo"
|
||||
- semana_12:
|
||||
vacuna: "Quintuple (Refuerzo)"
|
||||
nota: "Refuerzo obligatorio"
|
||||
- semana_16:
|
||||
vacuna: "Rabia"
|
||||
nota: "Obligatoria por ley"
|
||||
reportar_senasica: true
|
||||
- semana_16:
|
||||
vacuna: "Bordetella (opcional)"
|
||||
nota: "Recomendada para perros en contacto con otros"
|
||||
|
||||
adulto_canino:
|
||||
- anual:
|
||||
vacunas: ["Quintuple", "Rabia"]
|
||||
nota: "Refuerzos anuales"
|
||||
- cada_6_meses:
|
||||
vacuna: "Bordetella (opcional)"
|
||||
nota: "Para perros sociales"
|
||||
```
|
||||
|
||||
### 3.2 Felinos (Gatos)
|
||||
|
||||
```yaml
|
||||
gatito_felino:
|
||||
- semana_8:
|
||||
vacuna: "Triple Felina (Rinotraqueitis, Calicivirus, Panleucopenia)"
|
||||
nota: "Primera vacuna"
|
||||
- semana_12:
|
||||
vacuna: "Triple Felina (Refuerzo)"
|
||||
nota: "Refuerzo"
|
||||
- semana_12:
|
||||
vacuna: "Leucemia Felina"
|
||||
nota: "Segun riesgo"
|
||||
- semana_16:
|
||||
vacuna: "Rabia"
|
||||
nota: "Obligatoria"
|
||||
reportar_senasica: true
|
||||
|
||||
adulto_felino:
|
||||
- anual:
|
||||
vacunas: ["Triple Felina", "Rabia"]
|
||||
- anual_riesgo:
|
||||
vacuna: "Leucemia Felina"
|
||||
nota: "Solo gatos de exterior o conviviendo con positivos"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 4. API ENDPOINTS
|
||||
|
||||
### Vacunaciones
|
||||
|
||||
```yaml
|
||||
endpoints:
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/{mascotaId}/vacunaciones
|
||||
descripcion: "Historial de vacunas de una mascota"
|
||||
query:
|
||||
desde: date
|
||||
hasta: date
|
||||
response: Array de vacunaciones con detalles
|
||||
|
||||
- method: GET
|
||||
path: /api/v1/mascotas/{mascotaId}/vacunaciones/pendientes
|
||||
descripcion: "Vacunas pendientes segun esquema"
|
||||
response: Array de vacunas sugeridas con fecha
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/mascotas/{mascotaId}/vacunaciones
|
||||
descripcion: "Registrar aplicacion de vacuna"
|
||||
body:
|
||||
vacuna_id: string (requerido)
|
||||
fecha_aplicacion: date (requerido)
|
||||
lote: string
|
||||
fabricante: string
|
||||
via_administracion: string
|
||||
sitio_aplicacion: string
|
||||
dosis_ml: number
|
||||
costo: number
|
||||
notas: string
|
||||
response: Vacunacion registrada + proxima fecha
|
||||
|
||||
- method: GET
|
||||
path: /api/v1/vacunaciones/{id}
|
||||
descripcion: "Detalle de una vacunacion"
|
||||
response: Vacunacion completa
|
||||
|
||||
- method: PATCH
|
||||
path: /api/v1/vacunaciones/{id}/reaccion
|
||||
descripcion: "Registrar reaccion adversa"
|
||||
body:
|
||||
reaccion_adversa: boolean
|
||||
descripcion_reaccion: string
|
||||
response: Vacunacion actualizada
|
||||
```
|
||||
|
||||
### Certificados
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/vacunaciones/{id}/certificado
|
||||
descripcion: "Generar certificado PDF"
|
||||
response: PDF file
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/mascotas/{mascotaId}/cartilla
|
||||
descripcion: "Generar cartilla completa PDF"
|
||||
body:
|
||||
incluir_proximas: boolean
|
||||
response: PDF file
|
||||
```
|
||||
|
||||
### Recordatorios
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/recordatorios/pendientes
|
||||
descripcion: "Recordatorios pendientes de envio"
|
||||
query:
|
||||
fecha: date (default: hoy)
|
||||
response: Array de recordatorios
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/recordatorios/enviar
|
||||
descripcion: "Procesar y enviar recordatorios"
|
||||
body:
|
||||
fecha: date
|
||||
response: Resumen de envios
|
||||
```
|
||||
|
||||
### SENASICA
|
||||
|
||||
```yaml
|
||||
- method: GET
|
||||
path: /api/v1/senasica/pendientes
|
||||
descripcion: "Vacunas de rabia pendientes de reportar"
|
||||
query:
|
||||
desde: date
|
||||
hasta: date
|
||||
response: Array de vacunaciones
|
||||
|
||||
- method: POST
|
||||
path: /api/v1/senasica/reportar
|
||||
descripcion: "Generar reporte mensual SENASICA"
|
||||
body:
|
||||
mes: number
|
||||
anio: number
|
||||
response: Archivo de reporte + resumen
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 5. FLUJOS DE USUARIO
|
||||
|
||||
### 5.1 Aplicar Vacuna
|
||||
|
||||
```
|
||||
1. Veterinario abre expediente de mascota
|
||||
2. Ir a seccion "Vacunas"
|
||||
3. Click "Nueva Vacunacion"
|
||||
4. Sistema muestra:
|
||||
- Vacunas sugeridas segun edad/especie
|
||||
- Vacunas vencidas (alertas)
|
||||
5. Seleccionar vacuna del catalogo
|
||||
6. Completar datos:
|
||||
- Lote
|
||||
- Fabricante
|
||||
- Via de administracion
|
||||
- Sitio de aplicacion
|
||||
7. Guardar
|
||||
8. Sistema:
|
||||
- Calcula proxima fecha
|
||||
- Programa recordatorios
|
||||
- Si es rabia, marca para SENASICA
|
||||
9. Ofrecer generar certificado
|
||||
```
|
||||
|
||||
### 5.2 Verificar Esquema
|
||||
|
||||
```
|
||||
1. Abrir expediente de mascota
|
||||
2. Ir a seccion "Vacunas"
|
||||
3. Vista de timeline muestra:
|
||||
- Vacunas aplicadas (verde)
|
||||
- Vacunas pendientes segun esquema (amarillo)
|
||||
- Vacunas vencidas (rojo)
|
||||
4. Click en pendiente para aplicar
|
||||
5. Click en aplicada para ver detalle/certificado
|
||||
```
|
||||
|
||||
### 5.3 Procesar Recordatorios Diarios
|
||||
|
||||
```
|
||||
1. Cron job diario (8am)
|
||||
2. Sistema busca recordatorios con fecha = hoy
|
||||
3. Por cada recordatorio:
|
||||
- Obtener datos de mascota y propietario
|
||||
- Preparar mensaje personalizado
|
||||
- Enviar por canal configurado
|
||||
- Marcar como enviado
|
||||
4. Generar log de envios
|
||||
5. Alertar errores a administrador
|
||||
```
|
||||
|
||||
### 5.4 Generar Reporte SENASICA
|
||||
|
||||
```
|
||||
1. Admin accede a seccion SENASICA
|
||||
2. Selecciona mes/ano
|
||||
3. Sistema genera reporte con:
|
||||
- Total vacunas de rabia aplicadas
|
||||
- Por especie (canino/felino)
|
||||
- Por municipio
|
||||
- Datos de veterinarios
|
||||
4. Descargar en formato requerido
|
||||
5. Marcar vacunaciones como reportadas
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 6. CERTIFICADO DE VACUNACION
|
||||
|
||||
### Contenido del Certificado
|
||||
|
||||
```yaml
|
||||
certificado_vacunacion:
|
||||
encabezado:
|
||||
- Logo de clinica
|
||||
- Nombre de clinica
|
||||
- Direccion
|
||||
- Telefono
|
||||
- RFC
|
||||
|
||||
datos_mascota:
|
||||
- Nombre
|
||||
- Especie y raza
|
||||
- Sexo
|
||||
- Edad
|
||||
- Color
|
||||
- Microchip (si tiene)
|
||||
- Foto
|
||||
|
||||
datos_propietario:
|
||||
- Nombre completo
|
||||
- Direccion
|
||||
- Telefono
|
||||
|
||||
datos_vacunacion:
|
||||
- Vacuna aplicada
|
||||
- Fecha de aplicacion
|
||||
- Lote
|
||||
- Fabricante
|
||||
- Fecha de proxima aplicacion
|
||||
- Via y sitio de administracion
|
||||
|
||||
datos_veterinario:
|
||||
- Nombre completo
|
||||
- Cedula profesional
|
||||
- Firma digital
|
||||
|
||||
pie:
|
||||
- Numero de folio
|
||||
- Fecha de emision
|
||||
- QR de verificacion
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 7. INTEGRACION SENASICA
|
||||
|
||||
### Requerimientos del Reporte
|
||||
|
||||
```yaml
|
||||
reporte_senasica:
|
||||
frecuencia: "Mensual"
|
||||
plazo: "Primeros 5 dias del mes siguiente"
|
||||
|
||||
datos_requeridos:
|
||||
- Numero de vacunas de rabia aplicadas
|
||||
- Desglose por especie (canino/felino)
|
||||
- Municipio de aplicacion
|
||||
- Clave de establecimiento
|
||||
- Datos del MVZ responsable
|
||||
|
||||
formato:
|
||||
- Excel con plantilla oficial
|
||||
- O captura en sistema web SENASICA
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. VALIDACIONES
|
||||
|
||||
```yaml
|
||||
validaciones:
|
||||
- regla: "Vacuna debe ser aplicable a la especie"
|
||||
condicion: vacuna.especies_aplicables NOT CONTAINS mascota.especie_id
|
||||
error: "Esta vacuna no aplica para esta especie"
|
||||
|
||||
- regla: "Edad minima para aplicar"
|
||||
condicion: mascota.edad_semanas < vacuna.edad_minima_semanas
|
||||
error: "La mascota no tiene la edad minima para esta vacuna"
|
||||
|
||||
- regla: "Lote no caducado"
|
||||
condicion: fecha_aplicacion > fecha_caducidad_lote
|
||||
error: "El lote de vacuna esta caducado"
|
||||
|
||||
- regla: "Veterinario con cedula para rabia"
|
||||
condicion: vacuna.reportar_senasica AND NOT veterinario.cedula
|
||||
error: "Se requiere cedula profesional para vacunas de rabia"
|
||||
|
||||
- regla: "No duplicar vacuna en mismo dia"
|
||||
condicion: EXISTS vacunacion con misma vacuna y fecha
|
||||
warning: "Ya existe una aplicacion de esta vacuna en la misma fecha"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 9. DEPENDENCIAS
|
||||
|
||||
### Depende de
|
||||
- `veterinaria.mascotas` - Paciente a vacunar
|
||||
- `veterinaria.propietarios` - Para recordatorios
|
||||
- `core.usuarios` - Veterinario que aplica
|
||||
- `notificaciones` - Envio de recordatorios
|
||||
|
||||
### Dependientes
|
||||
- `veterinaria.consultas` - Vinculo con consulta
|
||||
- `reportes` - Estadisticas de vacunacion
|
||||
- `facturacion` - Cobro de vacunas
|
||||
|
||||
---
|
||||
|
||||
**Documento creado:** 2026-01-07
|
||||
**Autor:** Agente Orquestador Workspace
|
||||
**Version:** 1.0.0
|
||||
34
docs/04-modelado/trazabilidad/TRACEABILITY-MASTER.yml
Normal file
34
docs/04-modelado/trazabilidad/TRACEABILITY-MASTER.yml
Normal file
@ -0,0 +1,34 @@
|
||||
# TRACEABILITY-MASTER.yml v2.0
|
||||
# Proyecto: Clinica Veterinaria
|
||||
# Prefijo v2: CVT
|
||||
|
||||
traceability_version: "2.0"
|
||||
|
||||
project:
|
||||
code: "CVT"
|
||||
name: "Clinica Veterinaria - Sistema de Gestion para Clinicas Veterinarias"
|
||||
updated: "2026-01-10"
|
||||
|
||||
epics_summary:
|
||||
total: 0
|
||||
completed: 0
|
||||
in_progress: 0
|
||||
planned: 0
|
||||
|
||||
nomenclature_mapping:
|
||||
legacy: "CVT-EP"
|
||||
|
||||
epics: []
|
||||
|
||||
dependency_graph: {}
|
||||
|
||||
inventories:
|
||||
master: "docs/90-transversal/inventarios/"
|
||||
|
||||
health:
|
||||
last_validated: "2026-01-10"
|
||||
score: 0.50
|
||||
issues:
|
||||
- severity: "low"
|
||||
type: "initialization"
|
||||
description: "Proyecto en migracion inicial v2"
|
||||
172
docs/_MAP.md
Normal file
172
docs/_MAP.md
Normal file
@ -0,0 +1,172 @@
|
||||
# Clinica Veterinaria - Mapa de Documentacion
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Tipo:** ERP Especializado (hereda de erp-clinicas)
|
||||
**Fecha:** 2026-01-07
|
||||
**Estado:** Fase 0 - Preparacion
|
||||
|
||||
---
|
||||
|
||||
## Estructura de Documentacion
|
||||
|
||||
```
|
||||
docs/
|
||||
├── _MAP.md <- ESTE ARCHIVO
|
||||
├── 00-vision-general/
|
||||
│ ├── README.md <- Indice de vision
|
||||
│ └── VISION.md <- Vision estrategica [PENDIENTE]
|
||||
│
|
||||
├── 02-definicion-modulos/
|
||||
│ ├── _MAP.md <- Indice de modulos [PENDIENTE]
|
||||
│ ├── modulo-mascotas.md <- Registro de pacientes [PENDIENTE]
|
||||
│ ├── modulo-propietarios.md <- Duenos de mascotas [PENDIENTE]
|
||||
│ ├── modulo-vacunacion.md <- Cartilla de vacunas [PENDIENTE]
|
||||
│ ├── modulo-hospitalizacion.md <- Internamiento [PENDIENTE]
|
||||
│ ├── modulo-farmacia.md <- Medicamentos [PENDIENTE]
|
||||
│ ├── modulo-estetica.md <- Grooming [PENDIENTE]
|
||||
│ ├── modulo-laboratorio.md <- Analisis clinicos [PENDIENTE]
|
||||
│ └── modulo-cirugia.md <- Procedimientos [PENDIENTE]
|
||||
│
|
||||
├── 03-especificaciones/
|
||||
│ └── ... (futuras especificaciones tecnicas)
|
||||
│
|
||||
└── 90-transversal/
|
||||
└── ... (documentacion transversal)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Modulos Especializados (Veterinaria)
|
||||
|
||||
### Modulos Core
|
||||
|
||||
| Modulo | Prioridad | Estado | Descripcion |
|
||||
|--------|-----------|--------|-------------|
|
||||
| Mascotas | P1 | Pendiente | Registro de pacientes animales |
|
||||
| Propietarios | P1 | Pendiente | Gestion de duenos |
|
||||
| Vacunacion | P1 | Pendiente | Cartilla de vacunas por especie |
|
||||
| Consultas | P1 | Pendiente | Atencion veterinaria |
|
||||
|
||||
### Modulos Especializados
|
||||
|
||||
| Modulo | Prioridad | Estado | Descripcion |
|
||||
|--------|-----------|--------|-------------|
|
||||
| Hospitalizacion | P2 | Pendiente | Internamiento y seguimiento |
|
||||
| Farmacia | P2 | Pendiente | Medicamentos veterinarios |
|
||||
| Estetica | P2 | Pendiente | Grooming, bano, corte |
|
||||
| Laboratorio | P2 | Pendiente | Analisis clinicos |
|
||||
| Cirugia | P2 | Pendiente | Procedimientos quirurgicos |
|
||||
|
||||
---
|
||||
|
||||
## Modulos Heredados (de erp-clinicas)
|
||||
|
||||
| Modulo | Fuente | Adaptacion Requerida |
|
||||
|--------|--------|----------------------|
|
||||
| Expedientes | erp-clinicas | Adaptar a mascotas |
|
||||
| Citas | erp-clinicas | Ninguna |
|
||||
| Consultas | erp-clinicas | Agregar signos vitales animales |
|
||||
| Recetas | erp-clinicas | Medicamentos veterinarios |
|
||||
| Facturacion | erp-core | Ninguna |
|
||||
| Inventario | erp-core | Productos veterinarios |
|
||||
|
||||
---
|
||||
|
||||
## Especies Soportadas
|
||||
|
||||
### Principales
|
||||
|
||||
| Especie | Vacunas Requeridas |
|
||||
|---------|-------------------|
|
||||
| Canino (Perro) | Parvovirus, Moquillo, Hepatitis, Rabia, Leptospirosis, Bordetella |
|
||||
| Felino (Gato) | Triple felina, Leucemia felina, Rabia |
|
||||
|
||||
### Otras Especies
|
||||
|
||||
| Especie | Notas |
|
||||
|---------|-------|
|
||||
| Ave | Vacunas segun tipo |
|
||||
| Reptil | Sin vacunas estandar |
|
||||
| Roedor | Sin vacunas estandar |
|
||||
| Pez | Sin vacunas |
|
||||
| Exotico | Segun especie especifica |
|
||||
|
||||
---
|
||||
|
||||
## Entidades Especificas
|
||||
|
||||
### Mascota (Paciente)
|
||||
```yaml
|
||||
campos_principales:
|
||||
- nombre: VARCHAR(100)
|
||||
- especie: ENUM (canino, felino, ave, reptil, roedor, pez, exotico)
|
||||
- raza: VARCHAR(100)
|
||||
- sexo: ENUM (macho, hembra)
|
||||
- fecha_nacimiento: DATE
|
||||
- peso_actual: DECIMAL(6,2)
|
||||
- color: VARCHAR(100)
|
||||
- microchip: VARCHAR(50) UNIQUE
|
||||
- esterilizado: BOOLEAN
|
||||
- propietario_id: UUID (FK)
|
||||
```
|
||||
|
||||
### Propietario
|
||||
```yaml
|
||||
campos_principales:
|
||||
- nombre: VARCHAR(200)
|
||||
- telefono: VARCHAR(20)
|
||||
- email: VARCHAR(255)
|
||||
- direccion: TEXT
|
||||
- rfc: VARCHAR(13)
|
||||
```
|
||||
|
||||
### Cartilla Vacunacion
|
||||
```yaml
|
||||
campos_principales:
|
||||
- mascota_id: UUID (FK)
|
||||
- vacuna_id: UUID (FK catalogo)
|
||||
- fecha_aplicacion: DATE
|
||||
- fecha_proxima: DATE
|
||||
- lote: VARCHAR(50)
|
||||
- veterinario_id: UUID (FK)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Integraciones Externas
|
||||
|
||||
| Sistema | Proposito | Estado |
|
||||
|---------|-----------|--------|
|
||||
| SENASICA | Reportes de vacunacion | Pendiente |
|
||||
| Laboratorios | Resultados de analisis | Pendiente |
|
||||
| Proveedores | Pedidos de medicamentos | Pendiente |
|
||||
|
||||
---
|
||||
|
||||
## Navegacion Rapida
|
||||
|
||||
### Por Rol de Usuario
|
||||
- **Veterinario:** Consultas, diagnosticos, prescripciones
|
||||
- **Auxiliar veterinario:** Apoyo en consultas, hospitalizacion
|
||||
- **Recepcionista:** Citas, cobros, atencion al propietario
|
||||
- **Estilista:** Servicios de estetica (grooming)
|
||||
- **Administrador:** Gestion general, reportes
|
||||
|
||||
### Por Componente Tecnico
|
||||
- **Database:** Ver orchestration/inventarios/DATABASE_INVENTORY.yml
|
||||
- **Backend:** Ver orchestration/inventarios/BACKEND_INVENTORY.yml
|
||||
- **Frontend:** Ver orchestration/inventarios/FRONTEND_INVENTORY.yml
|
||||
|
||||
---
|
||||
|
||||
## Referencias
|
||||
|
||||
- [CONTEXTO-PROYECTO.md](../orchestration/00-guidelines/CONTEXTO-PROYECTO.md)
|
||||
- [HERENCIA-ERP-CLINICAS.md](../orchestration/00-guidelines/HERENCIA-ERP-CLINICAS.md)
|
||||
- [PROXIMA-ACCION.md](../orchestration/PROXIMA-ACCION.md)
|
||||
- [CONTEXT-MAP.yml](../orchestration/CONTEXT-MAP.yml)
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
**Version:** 1.0.0
|
||||
164
orchestration/00-guidelines/CONTEXTO-PROYECTO.md
Normal file
164
orchestration/00-guidelines/CONTEXTO-PROYECTO.md
Normal file
@ -0,0 +1,164 @@
|
||||
# Contexto del Proyecto - Clínica Veterinaria
|
||||
|
||||
## 1. Información General
|
||||
|
||||
| Campo | Valor |
|
||||
|-------|-------|
|
||||
| **Nombre:** | Clínica Veterinaria |
|
||||
| **Tipo:** | ERP Especializado |
|
||||
| **Giro:** | Servicios Veterinarios |
|
||||
| **Base:** | erp-clinicas |
|
||||
| **Fecha creación:** | 2026-01-04 |
|
||||
|
||||
---
|
||||
|
||||
## 2. Descripción del Negocio
|
||||
|
||||
Sistema de gestión integral para clínicas veterinarias que incluye:
|
||||
|
||||
- **Gestión de pacientes (mascotas):** Registro de animales con datos de especie, raza, propietario
|
||||
- **Consultas veterinarias:** Atención médica, diagnósticos, tratamientos
|
||||
- **Cartilla de vacunación:** Control de vacunas y desparasitaciones
|
||||
- **Hospitalización:** Internamiento y seguimiento de animales
|
||||
- **Estética canina/felina:** Servicios de grooming
|
||||
- **Farmacia veterinaria:** Inventario de medicamentos y alimentos
|
||||
- **Facturación:** Cobro de servicios y productos
|
||||
|
||||
## 3. Usuarios del Sistema
|
||||
|
||||
| Rol | Funciones |
|
||||
|-----|-----------|
|
||||
| Veterinario | Consultas, diagnósticos, prescripciones |
|
||||
| Auxiliar veterinario | Apoyo en consultas, hospitalización |
|
||||
| Recepcionista | Citas, cobros, atención al propietario |
|
||||
| Estilista | Servicios de estética |
|
||||
| Administrador | Gestión general, reportes |
|
||||
|
||||
## 4. Procesos Principales
|
||||
|
||||
### 4.1 Flujo de Consulta
|
||||
|
||||
```
|
||||
1. Propietario llega con mascota
|
||||
2. Recepción registra llegada / verifica cita
|
||||
3. Veterinario atiende consulta
|
||||
4. Registro de signos vitales (peso, temperatura)
|
||||
5. Diagnóstico y tratamiento
|
||||
6. Prescripción de medicamentos
|
||||
7. Actualización de cartilla (si aplica vacuna)
|
||||
8. Cobro en recepción
|
||||
9. Entrega de receta/medicamentos
|
||||
```
|
||||
|
||||
### 4.2 Flujo de Hospitalización
|
||||
|
||||
```
|
||||
1. Ingreso del animal
|
||||
2. Asignación de jaula/espacio
|
||||
3. Registro de tratamientos
|
||||
4. Monitoreo de signos vitales
|
||||
5. Administración de medicamentos
|
||||
6. Alta médica
|
||||
7. Instrucciones al propietario
|
||||
8. Cobro de servicios
|
||||
```
|
||||
|
||||
## 5. Entidades Principales
|
||||
|
||||
### 5.1 Mascotas (Pacientes)
|
||||
|
||||
| Campo | Descripción |
|
||||
|-------|-------------|
|
||||
| Nombre | Nombre de la mascota |
|
||||
| Especie | Perro, gato, ave, reptil, etc. |
|
||||
| Raza | Raza específica |
|
||||
| Sexo | Macho/Hembra |
|
||||
| Fecha nacimiento | Edad aproximada |
|
||||
| Peso | Peso actual |
|
||||
| Color | Color del pelaje/plumaje |
|
||||
| Chip | Número de microchip |
|
||||
| Esterilizado | Si está esterilizado |
|
||||
| Propietario | Dueño del animal |
|
||||
|
||||
### 5.2 Propietarios
|
||||
|
||||
| Campo | Descripción |
|
||||
|-------|-------------|
|
||||
| Nombre | Nombre completo |
|
||||
| Teléfono | Contacto principal |
|
||||
| Email | Correo electrónico |
|
||||
| Dirección | Domicilio |
|
||||
| RFC | Para facturación |
|
||||
| Mascotas | Lista de mascotas |
|
||||
|
||||
### 5.3 Consultas
|
||||
|
||||
| Campo | Descripción |
|
||||
|-------|-------------|
|
||||
| Mascota | Animal atendido |
|
||||
| Veterinario | Médico que atiende |
|
||||
| Fecha | Fecha de consulta |
|
||||
| Peso actual | Peso al momento |
|
||||
| Temperatura | Temperatura corporal |
|
||||
| Motivo | Razón de la consulta |
|
||||
| Diagnóstico | Diagnóstico veterinario |
|
||||
| Tratamiento | Plan de tratamiento |
|
||||
|
||||
## 6. Catálogos Específicos
|
||||
|
||||
### 6.1 Especies
|
||||
|
||||
- Perro (Canino)
|
||||
- Gato (Felino)
|
||||
- Ave
|
||||
- Reptil
|
||||
- Roedor
|
||||
- Pez
|
||||
- Otro
|
||||
|
||||
### 6.2 Especialidades Veterinarias
|
||||
|
||||
- Medicina General
|
||||
- Cirugía
|
||||
- Dermatología
|
||||
- Cardiología
|
||||
- Oftalmología
|
||||
- Ortopedia
|
||||
- Oncología
|
||||
- Exóticos
|
||||
|
||||
### 6.3 Vacunas Comunes
|
||||
|
||||
**Perros:**
|
||||
- Parvovirus
|
||||
- Moquillo
|
||||
- Hepatitis
|
||||
- Rabia
|
||||
- Leptospirosis
|
||||
- Bordetella
|
||||
|
||||
**Gatos:**
|
||||
- Triple felina
|
||||
- Leucemia felina
|
||||
- Rabia
|
||||
|
||||
## 7. Integraciones
|
||||
|
||||
| Sistema | Propósito |
|
||||
|---------|-----------|
|
||||
| SENASICA | Reporte de vacunación |
|
||||
| Laboratorios | Resultados de análisis |
|
||||
| Proveedores | Pedidos de medicamentos |
|
||||
|
||||
## 8. Métricas Clave
|
||||
|
||||
| Métrica | Descripción |
|
||||
|---------|-------------|
|
||||
| Consultas/día | Número de consultas diarias |
|
||||
| Tasa de vacunación | Cumplimiento de esquemas |
|
||||
| Días hospitalización | Promedio de estancia |
|
||||
| Satisfacción | Evaluación propietarios |
|
||||
|
||||
---
|
||||
|
||||
**Última actualización:** 2026-01-04
|
||||
116
orchestration/00-guidelines/HERENCIA-ERP-CLINICAS.md
Normal file
116
orchestration/00-guidelines/HERENCIA-ERP-CLINICAS.md
Normal file
@ -0,0 +1,116 @@
|
||||
# Herencia ERP-Clínicas - Clínica Veterinaria
|
||||
|
||||
## Información del Proyecto
|
||||
|
||||
| Campo | Valor |
|
||||
|-------|-------|
|
||||
| **Proyecto:** | clinica-veterinaria |
|
||||
| **Hereda de:** | erp-clinicas |
|
||||
| **Fecha creación:** | 2026-01-04 |
|
||||
| **Versión ERP-Clínicas:** | 1.0 FASE-8 |
|
||||
|
||||
---
|
||||
|
||||
## 1. Relación de Herencia
|
||||
|
||||
```
|
||||
erp-core (FASE-8)
|
||||
└── erp-clinicas (Base Genérica)
|
||||
└── clinica-veterinaria (Especialización)
|
||||
```
|
||||
|
||||
## 2. Qué Se Hereda de ERP-Clínicas
|
||||
|
||||
### 2.1 Schemas y Tablas
|
||||
|
||||
| Schema | Tablas | Heredadas |
|
||||
|--------|--------|-----------|
|
||||
| clinica | 13 tablas base | ✅ |
|
||||
| financial | 4 tablas FASE-8 | ✅ |
|
||||
| hr | 11 tablas FASE-8 | ✅ |
|
||||
| inventory | 5 tablas FASE-8 | ✅ |
|
||||
| purchase | 1 tabla FASE-8 | ✅ |
|
||||
|
||||
### 2.2 Funcionalidades Heredadas
|
||||
|
||||
- Sistema de citas y consultas
|
||||
- Expedientes clínicos
|
||||
- Gestión de pacientes (mascotas)
|
||||
- Sistema de prescripciones
|
||||
- Gestión de personal (veterinarios)
|
||||
- Inventario de medicamentos
|
||||
- Pagos y facturación
|
||||
|
||||
## 3. Especializaciones Veterinarias
|
||||
|
||||
### 3.1 Adaptaciones de Terminología
|
||||
|
||||
| ERP-Clínicas | Veterinaria |
|
||||
|--------------|-------------|
|
||||
| Paciente | Mascota/Animal |
|
||||
| Médico | Veterinario |
|
||||
| Especialidad Médica | Especialidad Veterinaria |
|
||||
| Consulta | Consulta Veterinaria |
|
||||
| Receta | Receta Veterinaria |
|
||||
|
||||
### 3.2 Tablas Adicionales
|
||||
|
||||
| Tabla | Propósito |
|
||||
|-------|-----------|
|
||||
| veterinaria.especies | Catálogo de especies (perro, gato, ave, etc.) |
|
||||
| veterinaria.razas | Catálogo de razas por especie |
|
||||
| veterinaria.propietarios | Dueños de mascotas |
|
||||
| veterinaria.mascotas | Pacientes animales |
|
||||
| veterinaria.vacunas | Catálogo de vacunas veterinarias |
|
||||
| veterinaria.cartilla_vacunacion | Historial de vacunación |
|
||||
| veterinaria.hospitalizacion | Internamiento de animales |
|
||||
| veterinaria.estetica | Servicios de estética |
|
||||
|
||||
### 3.3 Campos Adicionales
|
||||
|
||||
| Tabla Base | Campos Veterinaria |
|
||||
|------------|-------------------|
|
||||
| patients → mascotas | especie_id, raza_id, propietario_id, peso, chip, esterilizado |
|
||||
| consultations | peso_actual, temperatura, motivo_consulta |
|
||||
| prescriptions | dosis_por_kg, via_administracion |
|
||||
|
||||
## 4. Normativa Aplicable
|
||||
|
||||
| Normativa | Descripción |
|
||||
|-----------|-------------|
|
||||
| NOM-064-ZOO-2000 | Requisitos sanitarios clínicas veterinarias |
|
||||
| NOM-051-ZOO-1995 | Trato humanitario animales |
|
||||
| SENASICA | Requerimientos de registro |
|
||||
|
||||
## 5. Instalación
|
||||
|
||||
### 5.1 Orden de Ejecución
|
||||
|
||||
```bash
|
||||
# 1. Base ERP-Clínicas (heredado)
|
||||
psql -f erp-clinicas/database/init/01-extensions.sql
|
||||
psql -f erp-clinicas/database/init/02-core-schema.sql
|
||||
psql -f erp-clinicas/database/init/03-clinical-tables.sql
|
||||
psql -f erp-clinicas/database/schemas/04-financial-ext-schema-ddl.sql
|
||||
psql -f erp-clinicas/database/schemas/05-hr-ext-fase8-schema-ddl.sql
|
||||
psql -f erp-clinicas/database/schemas/06-inventory-ext-fase8-schema-ddl.sql
|
||||
psql -f erp-clinicas/database/schemas/07-purchase-ext-fase8-schema-ddl.sql
|
||||
psql -f erp-clinicas/database/schemas/08-clinica-ext-fase8-schema-ddl.sql
|
||||
|
||||
# 2. Especialización Veterinaria
|
||||
psql -f clinica-veterinaria/database/schemas/01-veterinaria-schema-ddl.sql
|
||||
|
||||
# 3. Seeds
|
||||
psql -f erp-clinicas/database/seeds/fase8/*.sql
|
||||
psql -f clinica-veterinaria/database/seeds/fase8/*.sql
|
||||
```
|
||||
|
||||
## 6. Versionado
|
||||
|
||||
| Versión | Fecha | Cambios |
|
||||
|---------|-------|---------|
|
||||
| 1.0 | 2026-01-04 | Creación inicial, herencia de erp-clinicas FASE-8 |
|
||||
|
||||
---
|
||||
|
||||
**Última actualización:** 2026-01-04
|
||||
322
orchestration/CONTEXT-MAP.yml
Normal file
322
orchestration/CONTEXT-MAP.yml
Normal file
@ -0,0 +1,322 @@
|
||||
# CONTEXT-MAP: CLINICA-VETERINARIA
|
||||
# Sistema: SIMCO - NEXUS v4.0
|
||||
# Proposito: Mapear contexto automatico por nivel y tarea
|
||||
# Version: 1.0.0
|
||||
# Fecha: 2026-01-07
|
||||
|
||||
metadata:
|
||||
proyecto: "clinica-veterinaria"
|
||||
nivel: "VERTICAL"
|
||||
version: "1.0.0"
|
||||
ultima_actualizacion: "2026-01-07"
|
||||
workspace_root: "/home/isem/workspace-v1"
|
||||
project_root: "/home/isem/workspace-v1/projects/clinica-veterinaria"
|
||||
hereda_de: "/home/isem/workspace-v1/projects/erp-clinicas"
|
||||
|
||||
# ===============================================================================
|
||||
# VARIABLES DEL PROYECTO (PRE-RESUELTAS)
|
||||
# ===============================================================================
|
||||
|
||||
variables:
|
||||
# Identificacion
|
||||
PROJECT: "clinica-veterinaria"
|
||||
PROJECT_NAME: "CLINICA-VETERINARIA"
|
||||
PROJECT_LEVEL: "VERTICAL"
|
||||
PARENT_PROJECT: "erp-clinicas"
|
||||
|
||||
# Base de datos
|
||||
DB_NAME: "clinica_veterinaria"
|
||||
DB_DDL_PATH: "/home/isem/workspace-v1/projects/clinica-veterinaria/database/schemas"
|
||||
DB_SCRIPTS_PATH: "/home/isem/workspace-v1/projects/clinica-veterinaria/database"
|
||||
DB_SEEDS_PATH: "/home/isem/workspace-v1/projects/clinica-veterinaria/database/seeds"
|
||||
RECREATE_CMD: "drop-and-recreate-database.sh"
|
||||
|
||||
# Backend
|
||||
BACKEND_ROOT: "/home/isem/workspace-v1/projects/clinica-veterinaria/backend"
|
||||
BACKEND_SRC: "/home/isem/workspace-v1/projects/clinica-veterinaria/backend/src"
|
||||
BACKEND_TESTS: "/home/isem/workspace-v1/projects/clinica-veterinaria/backend/tests"
|
||||
|
||||
# Frontend
|
||||
FRONTEND_ROOT: "/home/isem/workspace-v1/projects/clinica-veterinaria/frontend"
|
||||
FRONTEND_SRC: "/home/isem/workspace-v1/projects/clinica-veterinaria/frontend/src"
|
||||
|
||||
# Documentacion
|
||||
DOCS_PATH: "/home/isem/workspace-v1/projects/clinica-veterinaria/docs"
|
||||
ORCHESTRATION_PATH: "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration"
|
||||
|
||||
# ===============================================================================
|
||||
# ALIASES RESUELTOS
|
||||
# ===============================================================================
|
||||
|
||||
aliases:
|
||||
# Directivas globales
|
||||
"@SIMCO": "/home/isem/workspace-v1/orchestration/directivas/simco"
|
||||
"@PRINCIPIOS": "/home/isem/workspace-v1/orchestration/directivas/principios"
|
||||
"@PERFILES": "/home/isem/workspace-v1/orchestration/agents/perfiles"
|
||||
"@CATALOG": "/home/isem/workspace-v1/shared/catalog"
|
||||
|
||||
# Proyecto padre (erp-clinicas)
|
||||
"@PARENT": "/home/isem/workspace-v1/projects/erp-clinicas"
|
||||
"@PARENT_CORE": "/home/isem/workspace-v1/projects/erp-core"
|
||||
|
||||
# Proyecto especifico
|
||||
"@DDL": "/home/isem/workspace-v1/projects/clinica-veterinaria/database/schemas"
|
||||
"@SEEDS": "/home/isem/workspace-v1/projects/clinica-veterinaria/database/seeds"
|
||||
"@BACKEND": "/home/isem/workspace-v1/projects/clinica-veterinaria/backend/src"
|
||||
"@FRONTEND": "/home/isem/workspace-v1/projects/clinica-veterinaria/frontend/src"
|
||||
"@DOCS": "/home/isem/workspace-v1/projects/clinica-veterinaria/docs"
|
||||
|
||||
# Inventarios
|
||||
"@INVENTORY": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios"
|
||||
"@INV_DB": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/DATABASE_INVENTORY.yml"
|
||||
"@INV_BE": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/BACKEND_INVENTORY.yml"
|
||||
"@INV_FE": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/FRONTEND_INVENTORY.yml"
|
||||
|
||||
# Trazas
|
||||
"@TRAZA_DB": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/trazas/TRAZA-TAREAS-DATABASE.md"
|
||||
"@TRAZA_BE": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/trazas/TRAZA-TAREAS-BACKEND.md"
|
||||
"@TRAZA_FE": "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/trazas/TRAZA-TAREAS-FRONTEND.md"
|
||||
|
||||
# ===============================================================================
|
||||
# CONTEXTO POR NIVEL
|
||||
# ===============================================================================
|
||||
|
||||
contexto_por_nivel:
|
||||
L0_sistema:
|
||||
descripcion: "Principios fundamentales y perfil de agente"
|
||||
tokens_estimados: 4500
|
||||
obligatorio: true
|
||||
archivos:
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-CAPVED.md"
|
||||
proposito: "Ciclo de vida de tareas"
|
||||
tokens: 800
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-DOC-PRIMERO.md"
|
||||
proposito: "Documentacion antes de codigo"
|
||||
tokens: 500
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-ANTI-DUPLICACION.md"
|
||||
proposito: "Verificar catalogo antes de crear"
|
||||
tokens: 600
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-VALIDACION-OBLIGATORIA.md"
|
||||
proposito: "Build/lint deben pasar"
|
||||
tokens: 600
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-ECONOMIA-TOKENS.md"
|
||||
proposito: "Limites de contexto"
|
||||
tokens: 500
|
||||
- path: "/home/isem/workspace-v1/orchestration/directivas/principios/PRINCIPIO-NO-ASUMIR.md"
|
||||
proposito: "Preguntar si falta informacion"
|
||||
tokens: 500
|
||||
- path: "/home/isem/workspace-v1/orchestration/referencias/ALIASES.yml"
|
||||
proposito: "Resolucion de @ALIAS"
|
||||
tokens: 400
|
||||
|
||||
L1_proyecto:
|
||||
descripcion: "Contexto especifico de CLINICA-VETERINARIA"
|
||||
tokens_estimados: 3000
|
||||
obligatorio: true
|
||||
archivos:
|
||||
- path: "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/00-guidelines/CONTEXTO-PROYECTO.md"
|
||||
proposito: "Variables y configuracion del proyecto"
|
||||
tokens: 1500
|
||||
- path: "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/PROXIMA-ACCION.md"
|
||||
proposito: "Estado actual y siguiente paso"
|
||||
tokens: 500
|
||||
- path: "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/00-guidelines/HERENCIA-ERP-CLINICAS.md"
|
||||
proposito: "Herencia de modulos del padre"
|
||||
tokens: 800
|
||||
|
||||
L2_operacion:
|
||||
descripcion: "SIMCO especificos segun operacion y dominio"
|
||||
tokens_estimados: 2500
|
||||
archivos_por_operacion:
|
||||
CREAR:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-CREAR.md"
|
||||
MODIFICAR:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-MODIFICAR.md"
|
||||
VALIDAR:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-VALIDAR.md"
|
||||
DELEGAR:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-DELEGACION.md"
|
||||
archivos_por_dominio:
|
||||
DDL:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-DDL.md"
|
||||
- "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/DATABASE_INVENTORY.yml"
|
||||
BACKEND:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-BACKEND.md"
|
||||
- "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/BACKEND_INVENTORY.yml"
|
||||
FRONTEND:
|
||||
- "/home/isem/workspace-v1/orchestration/directivas/simco/SIMCO-FRONTEND.md"
|
||||
- "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/inventarios/FRONTEND_INVENTORY.yml"
|
||||
|
||||
L3_tarea:
|
||||
descripcion: "Contexto especifico de la tarea"
|
||||
tokens_max: 8000
|
||||
dinamico: true
|
||||
|
||||
# ===============================================================================
|
||||
# INTEGRACION CON DOCUMENTACION (docs/)
|
||||
# ===============================================================================
|
||||
|
||||
integracion_docs:
|
||||
mapa_docs: "@DOCS/_MAP.md"
|
||||
|
||||
estructura:
|
||||
vision: "@DOCS/00-vision-general/"
|
||||
modulos: "@DOCS/02-definicion-modulos/"
|
||||
|
||||
modulos_especializados:
|
||||
- modulo_mascotas:
|
||||
descripcion: "Registro de pacientes animales"
|
||||
ruta: "@DOCS/02-definicion-modulos/modulo-mascotas.md"
|
||||
- modulo_propietarios:
|
||||
descripcion: "Gestion de duenos de mascotas"
|
||||
ruta: "@DOCS/02-definicion-modulos/modulo-propietarios.md"
|
||||
- modulo_vacunacion:
|
||||
descripcion: "Cartilla de vacunas y desparasitacion"
|
||||
ruta: "@DOCS/02-definicion-modulos/modulo-vacunacion.md"
|
||||
- modulo_hospitalizacion:
|
||||
descripcion: "Internamiento y seguimiento"
|
||||
ruta: "@DOCS/02-definicion-modulos/modulo-hospitalizacion.md"
|
||||
- modulo_farmacia:
|
||||
descripcion: "Inventario de medicamentos veterinarios"
|
||||
ruta: "@DOCS/02-definicion-modulos/modulo-farmacia.md"
|
||||
|
||||
# ===============================================================================
|
||||
# MAPA TAREA -> ARCHIVOS (Especifico CLINICA-VETERINARIA)
|
||||
# ===============================================================================
|
||||
|
||||
mapa_tarea_contexto:
|
||||
database:
|
||||
crear_tabla:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-DDL.md"]
|
||||
inventario: "@INV_DB"
|
||||
referencia: "@DDL/*.sql"
|
||||
docs: "@DOCS/02-definicion-modulos/"
|
||||
|
||||
crear_mascota:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-DDL.md"]
|
||||
inventario: "@INV_DB"
|
||||
referencia: "@DDL/01-veterinaria-schema-ddl.sql"
|
||||
|
||||
backend:
|
||||
crear_entity:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-BACKEND.md"]
|
||||
inventario: "@INV_BE"
|
||||
referencia: "@BACKEND/modules/*/entities/*.entity.ts"
|
||||
|
||||
crear_service:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-BACKEND.md"]
|
||||
inventario: "@INV_BE"
|
||||
referencia: "@BACKEND/modules/*/services/*.service.ts"
|
||||
|
||||
crear_controller:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-BACKEND.md"]
|
||||
inventario: "@INV_BE"
|
||||
referencia: "@BACKEND/modules/*/controllers/*.controller.ts"
|
||||
|
||||
frontend:
|
||||
crear_componente:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-FRONTEND.md"]
|
||||
inventario: "@INV_FE"
|
||||
referencia: "@FRONTEND/components/**/*.tsx"
|
||||
|
||||
crear_pagina:
|
||||
simco: ["SIMCO-CREAR.md", "SIMCO-FRONTEND.md"]
|
||||
inventario: "@INV_FE"
|
||||
referencia: "@FRONTEND/pages/**/*.tsx"
|
||||
|
||||
# ===============================================================================
|
||||
# INFORMACION ESPECIFICA DEL PROYECTO
|
||||
# ===============================================================================
|
||||
|
||||
info_proyecto:
|
||||
tipo: "ERP Especializado - Clinica Veterinaria"
|
||||
estado: "Fase 0 - Preparacion"
|
||||
version: "0.1.0"
|
||||
|
||||
stack:
|
||||
backend: "NestJS (hereda de erp-clinicas)"
|
||||
frontend: "React + TailwindCSS"
|
||||
database: "PostgreSQL 16+ con RLS"
|
||||
|
||||
entidades_especializadas:
|
||||
- mascotas
|
||||
- propietarios
|
||||
- cartilla_vacunacion
|
||||
- hospitalizaciones
|
||||
- estetica_canina
|
||||
- farmacia_veterinaria
|
||||
|
||||
modulos_heredados:
|
||||
- expedientes (de erp-clinicas, adaptado a mascotas)
|
||||
- citas (de erp-clinicas)
|
||||
- consultas (de erp-clinicas)
|
||||
- recetas (de erp-clinicas)
|
||||
- facturacion (de erp-core)
|
||||
- inventario (de erp-core)
|
||||
|
||||
especies_soportadas:
|
||||
- canino (perro)
|
||||
- felino (gato)
|
||||
- ave
|
||||
- reptil
|
||||
- roedor
|
||||
- pez
|
||||
- exotico
|
||||
|
||||
vacunas_por_especie:
|
||||
canino:
|
||||
- parvovirus
|
||||
- moquillo
|
||||
- hepatitis
|
||||
- rabia
|
||||
- leptospirosis
|
||||
- bordetella
|
||||
felino:
|
||||
- triple_felina
|
||||
- leucemia_felina
|
||||
- rabia
|
||||
|
||||
integraciones:
|
||||
- SENASICA (reportes de vacunacion)
|
||||
- laboratorios (resultados)
|
||||
- proveedores (medicamentos)
|
||||
|
||||
# ===============================================================================
|
||||
# VALIDACION DE TOKENS
|
||||
# ===============================================================================
|
||||
|
||||
validacion_tokens:
|
||||
limite_absoluto: 25000
|
||||
limite_seguro: 18000
|
||||
limite_alerta: 20000
|
||||
|
||||
presupuesto:
|
||||
L0_sistema: 4500
|
||||
L1_proyecto: 3000
|
||||
L2_operacion: 2500
|
||||
L3_tarea_max: 8000
|
||||
total_base: 10000
|
||||
disponible_tarea: 8000
|
||||
|
||||
# ===============================================================================
|
||||
# HERENCIA
|
||||
# ===============================================================================
|
||||
|
||||
herencia:
|
||||
tipo: "VERTICAL"
|
||||
hereda_de:
|
||||
- "/home/isem/workspace-v1/projects/erp-clinicas/"
|
||||
- "/home/isem/workspace-v1/projects/erp-core/"
|
||||
- "/home/isem/workspace-v1/orchestration/"
|
||||
|
||||
# ===============================================================================
|
||||
# BUSQUEDA DE HISTORICO
|
||||
# ===============================================================================
|
||||
|
||||
busqueda_historico:
|
||||
habilitado: true
|
||||
ubicaciones:
|
||||
- "/home/isem/workspace-v1/projects/clinica-veterinaria/orchestration/trazas/"
|
||||
- "/home/isem/workspace-v1/projects/erp-clinicas/orchestration/trazas/"
|
||||
- "/home/isem/workspace-v1/orchestration/errores/REGISTRO-ERRORES.yml"
|
||||
- "/home/isem/workspace-v1/shared/knowledge-base/lessons-learned/"
|
||||
57
orchestration/PROJECT-STATUS.md
Normal file
57
orchestration/PROJECT-STATUS.md
Normal file
@ -0,0 +1,57 @@
|
||||
# PROJECT STATUS - Clinica Veterinaria
|
||||
|
||||
**Fecha:** 2026-01-07
|
||||
**Estado:** En Desarrollo
|
||||
**Fase:** Database
|
||||
|
||||
---
|
||||
|
||||
## Resumen
|
||||
|
||||
| Aspecto | Estado | Notas |
|
||||
|---------|--------|-------|
|
||||
| Database | Completado | DDL y seeds listos |
|
||||
| Backend | Pendiente | - |
|
||||
| Frontend | Pendiente | - |
|
||||
| Tests | Pendiente | - |
|
||||
| Documentacion | Parcial | Contexto completo, falta epicas |
|
||||
|
||||
---
|
||||
|
||||
## Progreso por Modulo
|
||||
|
||||
| Modulo | DDL | Backend | Frontend | Tests |
|
||||
|--------|-----|---------|----------|-------|
|
||||
| Mascotas | OK | - | - | - |
|
||||
| Propietarios | OK | - | - | - |
|
||||
| Vacunacion | OK | - | - | - |
|
||||
| Hospitalizacion | OK | - | - | - |
|
||||
| Farmacia | - | - | - | - |
|
||||
|
||||
---
|
||||
|
||||
## Dependencias
|
||||
|
||||
- **erp-clinicas:** Modulos base de gestion clinica
|
||||
- **erp-core:** Auth, users, tenants, billing
|
||||
|
||||
---
|
||||
|
||||
## Proximas Acciones
|
||||
|
||||
1. Implementar backend para modulo mascotas
|
||||
2. Crear interfaz de cartilla de vacunacion
|
||||
3. Integrar con sistema de citas de erp-clinicas
|
||||
|
||||
---
|
||||
|
||||
## Riesgos
|
||||
|
||||
| Riesgo | Probabilidad | Impacto | Mitigacion |
|
||||
|--------|--------------|---------|------------|
|
||||
| Variedad de especies | Media | Medio | Catalogos extensibles |
|
||||
| Integracion con erp-clinicas | Baja | Medio | Seguir patrones existentes |
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
244
orchestration/PROXIMA-ACCION.md
Normal file
244
orchestration/PROXIMA-ACCION.md
Normal file
@ -0,0 +1,244 @@
|
||||
# PROXIMA ACCION - Clinica Veterinaria
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Estado:** Fase 0 - Preparacion
|
||||
**Fecha:** 2026-01-07
|
||||
**Hereda de:** erp-clinicas > erp-core
|
||||
|
||||
---
|
||||
|
||||
## RESUMEN DEL ESTADO ACTUAL
|
||||
|
||||
### Estructura Base: CREADA
|
||||
|
||||
| Artefacto | Estado | Ubicacion |
|
||||
|-----------|--------|-----------|
|
||||
| README.md | EXISTE | raiz |
|
||||
| CONTEXTO-PROYECTO.md | EXISTE | orchestration/00-guidelines/ |
|
||||
| HERENCIA-ERP-CLINICAS.md | EXISTE | orchestration/00-guidelines/ |
|
||||
| ENVIRONMENT-INVENTORY.yml | EXISTE | orchestration/environment/ |
|
||||
| MASTER_INVENTORY.yml | EXISTE | orchestration/inventarios/ |
|
||||
| PROJECT-STATUS.md | FALTA | orchestration/ |
|
||||
| CONTEXT-MAP.yml | CREADO | orchestration/ |
|
||||
| PROXIMA-ACCION.md | CREADO | orchestration/ |
|
||||
|
||||
### Documentacion: MINIMA
|
||||
|
||||
| Artefacto | Estado | Prioridad |
|
||||
|-----------|--------|-----------|
|
||||
| docs/00-vision-general/VISION.md | FALTA | P0 |
|
||||
| docs/00-vision-general/_MAP.md | FALTA | P1 |
|
||||
| docs/02-definicion-modulos/_MAP.md | FALTA | P0 |
|
||||
| modulo-mascotas.md | FALTA | P1 |
|
||||
| modulo-propietarios.md | FALTA | P1 |
|
||||
| modulo-vacunacion.md | FALTA | P1 |
|
||||
| modulo-hospitalizacion.md | FALTA | P2 |
|
||||
| modulo-farmacia.md | FALTA | P2 |
|
||||
| orchestration/_MAP.md | FALTA | P1 |
|
||||
| PROJECT-STATUS.md | FALTA | P1 |
|
||||
|
||||
---
|
||||
|
||||
## PROXIMA ACCION INMEDIATA
|
||||
|
||||
### Tarea: Crear docs/00-vision-general/VISION.md
|
||||
|
||||
**Prioridad:** P0
|
||||
**Estimacion:** 2-3 horas
|
||||
**Responsable:** Agente Requirements Analyst
|
||||
|
||||
**Descripcion:**
|
||||
Documentar la vision estrategica del proyecto de clinica veterinaria, incluyendo:
|
||||
- Propuesta de valor
|
||||
- Target market
|
||||
- Diferenciadores vs erp-clinicas base
|
||||
- Roadmap de funcionalidades veterinarias especificas
|
||||
|
||||
**Contenido esperado:**
|
||||
```markdown
|
||||
# Vision - Clinica Veterinaria
|
||||
|
||||
## 1. Proposito
|
||||
Sistema de gestion integral para clinicas veterinarias...
|
||||
|
||||
## 2. Propuesta de Valor
|
||||
- Gestion de mascotas por especie
|
||||
- Cartilla de vacunacion digital
|
||||
- Control de hospitalizacion
|
||||
- Farmacia veterinaria
|
||||
- Estetica canina/felina
|
||||
|
||||
## 3. Usuarios Objetivo
|
||||
- Veterinarios
|
||||
- Auxiliares veterinarios
|
||||
- Recepcionistas
|
||||
- Estilistas (grooming)
|
||||
- Administradores
|
||||
|
||||
## 4. Diferenciadores
|
||||
- Soporte multi-especie
|
||||
- Integracion SENASICA
|
||||
- Control de vacunacion por especie
|
||||
...
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## BACKLOG DE TAREAS
|
||||
|
||||
### Sprint 1: Vision y Navegacion (7h)
|
||||
|
||||
| # | Tarea | Prioridad | Horas |
|
||||
|---|-------|-----------|-------|
|
||||
| 1 | Crear VISION.md | P0 | 2-3 |
|
||||
| 2 | Crear PROJECT-STATUS.md | P1 | 1 |
|
||||
| 3 | Crear docs/00-vision-general/_MAP.md | P1 | 1 |
|
||||
| 4 | Crear docs/02-definicion-modulos/_MAP.md | P0 | 1-2 |
|
||||
| 5 | Crear orchestration/_MAP.md | P1 | 1 |
|
||||
|
||||
### Sprint 2: Modulos Core (9h)
|
||||
|
||||
| # | Tarea | Prioridad | Horas |
|
||||
|---|-------|-----------|-------|
|
||||
| 1 | modulo-mascotas.md | P1 | 2-3 |
|
||||
| 2 | modulo-propietarios.md | P1 | 1.5-2 |
|
||||
| 3 | modulo-vacunacion.md | P1 | 2-2.5 |
|
||||
| 4 | modulo-consultas.md | P1 | 1.5-2 |
|
||||
|
||||
### Sprint 3: Modulos Especializados (8h)
|
||||
|
||||
| # | Tarea | Prioridad | Horas |
|
||||
|---|-------|-----------|-------|
|
||||
| 1 | modulo-hospitalizacion.md | P2 | 1.5-2 |
|
||||
| 2 | modulo-farmacia.md | P2 | 2.5-3 |
|
||||
| 3 | modulo-estetica.md | P2 | 1-1.5 |
|
||||
| 4 | modulo-laboratorio.md | P2 | 1.5-2 |
|
||||
|
||||
---
|
||||
|
||||
## DEPENDENCIAS
|
||||
|
||||
### De erp-clinicas (heredados):
|
||||
- Modulo Expedientes (adaptado a mascotas)
|
||||
- Modulo Citas
|
||||
- Modulo Consultas
|
||||
- Modulo Recetas
|
||||
|
||||
### De erp-core (heredados):
|
||||
- Modulo Autenticacion
|
||||
- Modulo Usuarios
|
||||
- Modulo Facturacion
|
||||
- Modulo Inventario
|
||||
- Modulo Catalogs
|
||||
|
||||
### Especificos Veterinaria:
|
||||
- Mascotas (nuevo)
|
||||
- Propietarios (nuevo)
|
||||
- Cartilla Vacunacion (nuevo)
|
||||
- Hospitalizacion (nuevo)
|
||||
- Farmacia Veterinaria (nuevo)
|
||||
- Estetica (nuevo)
|
||||
|
||||
---
|
||||
|
||||
## ENTIDADES ESPECIALIZADAS
|
||||
|
||||
### Mascota (Paciente)
|
||||
```yaml
|
||||
campos:
|
||||
- id: UUID
|
||||
- nombre: VARCHAR(100)
|
||||
- especie_id: UUID (FK especies)
|
||||
- raza_id: UUID (FK razas)
|
||||
- sexo: ENUM (macho, hembra)
|
||||
- fecha_nacimiento: DATE
|
||||
- peso_actual: DECIMAL(6,2)
|
||||
- color: VARCHAR(100)
|
||||
- microchip: VARCHAR(50) UNIQUE
|
||||
- esterilizado: BOOLEAN
|
||||
- propietario_id: UUID (FK propietarios)
|
||||
```
|
||||
|
||||
### Propietario
|
||||
```yaml
|
||||
campos:
|
||||
- id: UUID
|
||||
- nombre: VARCHAR(200)
|
||||
- telefono: VARCHAR(20)
|
||||
- email: VARCHAR(255)
|
||||
- direccion: TEXT
|
||||
- rfc: VARCHAR(13)
|
||||
- mascotas: FK[]
|
||||
```
|
||||
|
||||
### Cartilla Vacunacion
|
||||
```yaml
|
||||
campos:
|
||||
- id: UUID
|
||||
- mascota_id: UUID (FK)
|
||||
- vacuna_id: UUID (FK catalogo)
|
||||
- fecha_aplicacion: DATE
|
||||
- fecha_proxima: DATE
|
||||
- lote: VARCHAR(50)
|
||||
- veterinario_id: UUID (FK)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ESPECIES SOPORTADAS
|
||||
|
||||
```yaml
|
||||
especies:
|
||||
- canino:
|
||||
vacunas: [parvovirus, moquillo, hepatitis, rabia, leptospirosis, bordetella]
|
||||
- felino:
|
||||
vacunas: [triple_felina, leucemia_felina, rabia]
|
||||
- ave:
|
||||
vacunas: [paramixovirus, viruela_aviar]
|
||||
- reptil:
|
||||
vacunas: []
|
||||
- roedor:
|
||||
vacunas: []
|
||||
- pez:
|
||||
vacunas: []
|
||||
- exotico:
|
||||
vacunas: [segun_especie]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## INTEGRACIONES
|
||||
|
||||
| Sistema | Proposito | Estado |
|
||||
|---------|-----------|--------|
|
||||
| SENASICA | Reportes de vacunacion | Pendiente |
|
||||
| Laboratorios | Resultados de analisis | Pendiente |
|
||||
| Proveedores | Pedidos de medicamentos | Pendiente |
|
||||
|
||||
---
|
||||
|
||||
## METRICAS DE PROGRESO
|
||||
|
||||
| Metrica | Valor Actual | Objetivo |
|
||||
|---------|--------------|----------|
|
||||
| Archivos SIMCO | 8 | 22+ |
|
||||
| Modulos documentados | 0 | 9 |
|
||||
| User Stories | 0 | 30+ |
|
||||
| Cobertura docs | ~25% | 100% |
|
||||
|
||||
---
|
||||
|
||||
## NOTAS
|
||||
|
||||
- Hereda base completa de erp-clinicas
|
||||
- Especializar en medicina veterinaria
|
||||
- Mascotas reemplazan a Pacientes humanos
|
||||
- Propietarios son los responsables
|
||||
- Vacunacion varia segun especie
|
||||
- Considerar integracion SENASICA
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
**Autor:** Agente Orquestador Workspace
|
||||
**Version:** 1.0.0
|
||||
694
orchestration/environment/ENVIRONMENT-INVENTORY.yml
Normal file
694
orchestration/environment/ENVIRONMENT-INVENTORY.yml
Normal file
@ -0,0 +1,694 @@
|
||||
# =============================================================================
|
||||
# ENVIRONMENT-INVENTORY.yml - CLINICA-VETERINARIA
|
||||
# =============================================================================
|
||||
# Inventario Completo de Entorno de Desarrollo y Produccion
|
||||
# Generado por: @PERFIL_DEVENV
|
||||
# Basado en: orchestration/templates/TEMPLATE-ENVIRONMENT-INVENTORY.yml
|
||||
# =============================================================================
|
||||
|
||||
version: "1.1.0"
|
||||
fecha_creacion: "2026-01-04"
|
||||
fecha_actualizacion: "2026-01-04"
|
||||
responsable: "@PERFIL_DEVENV"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# IDENTIFICACION DEL PROYECTO
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
proyecto:
|
||||
nombre: "Clinica Veterinaria"
|
||||
alias: "clinica-veterinaria"
|
||||
codigo: "CV"
|
||||
nivel: "NIVEL_2B.3"
|
||||
tipo: "vertical-especializada"
|
||||
estado: "desarrollo"
|
||||
descripcion: "Sistema de gestion para clinicas veterinarias"
|
||||
parent: "erp-clinicas"
|
||||
herencia:
|
||||
- erp-core
|
||||
- erp-clinicas
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# HERRAMIENTAS Y RUNTIME
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
herramientas:
|
||||
runtime:
|
||||
node:
|
||||
version: "20.x"
|
||||
version_minima: "18.x"
|
||||
requerido: true
|
||||
notas: "LTS recomendado para NestJS y React"
|
||||
python:
|
||||
version: ""
|
||||
requerido: false
|
||||
notas: "No requerido para este proyecto"
|
||||
|
||||
package_managers:
|
||||
npm:
|
||||
version: "10.x"
|
||||
requerido: true
|
||||
pnpm:
|
||||
version: "8.x"
|
||||
requerido: false
|
||||
notas: "Alternativa opcional"
|
||||
|
||||
build_tools:
|
||||
- nombre: "Vite"
|
||||
version: "5.x"
|
||||
uso: "Frontend build y dev server"
|
||||
- nombre: "TypeScript"
|
||||
version: "5.x"
|
||||
uso: "Compilacion de codigo"
|
||||
- nombre: "NestJS CLI"
|
||||
version: "10.x"
|
||||
uso: "Backend scaffolding y build"
|
||||
|
||||
linters:
|
||||
- nombre: "ESLint"
|
||||
version: "8.x"
|
||||
config: ".eslintrc.js"
|
||||
- nombre: "Prettier"
|
||||
version: "3.x"
|
||||
config: ".prettierrc"
|
||||
|
||||
testing:
|
||||
- nombre: "Jest"
|
||||
version: "29.x"
|
||||
tipo: "unit backend"
|
||||
config: "jest.config.js"
|
||||
- nombre: "Vitest"
|
||||
version: "1.x"
|
||||
tipo: "unit frontend"
|
||||
config: "vitest.config.ts"
|
||||
- nombre: "Supertest"
|
||||
version: "6.x"
|
||||
tipo: "e2e"
|
||||
config: "jest-e2e.config.js"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# SERVICIOS Y PUERTOS
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
servicios:
|
||||
frontend:
|
||||
nombre: "clinica-veterinaria-frontend"
|
||||
framework: "React"
|
||||
version: "18.x"
|
||||
puerto: 3120
|
||||
comando_dev: "npm run dev"
|
||||
comando_build: "npm run build"
|
||||
comando_preview: "npm run preview"
|
||||
ubicacion: "apps/frontend/"
|
||||
url_local: "http://localhost:3120"
|
||||
build_output: "dist/"
|
||||
|
||||
backend:
|
||||
nombre: "clinica-veterinaria-backend"
|
||||
framework: "NestJS"
|
||||
version: "10.x"
|
||||
puerto: 3121
|
||||
comando_dev: "npm run start:dev"
|
||||
comando_build: "npm run build"
|
||||
comando_prod: "npm run start:prod"
|
||||
ubicacion: "apps/backend/"
|
||||
url_local: "http://localhost:3121"
|
||||
api_prefix: "/api/v1"
|
||||
swagger_url: "http://localhost:3121/api/docs"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# BASE DE DATOS - CONFIGURACION COMPLETA
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
base_de_datos:
|
||||
principal:
|
||||
engine: "PostgreSQL"
|
||||
version: "15"
|
||||
host_variable: "DB_HOST"
|
||||
puerto_variable: "DB_PORT"
|
||||
|
||||
ambientes:
|
||||
development:
|
||||
host: "localhost"
|
||||
puerto: 5440
|
||||
nombre: "clinica_veterinaria_dev"
|
||||
usuario: "veterinaria_dev"
|
||||
password_ref: "DB_PASSWORD en .env"
|
||||
ssl: false
|
||||
pool_size: 10
|
||||
conexion: "postgresql://veterinaria_dev:{password}@localhost:5440/clinica_veterinaria_dev"
|
||||
|
||||
test:
|
||||
host: "localhost"
|
||||
puerto: 5440
|
||||
nombre: "clinica_veterinaria_test"
|
||||
usuario: "veterinaria_dev"
|
||||
password_ref: "DB_PASSWORD en .env"
|
||||
ssl: false
|
||||
pool_size: 5
|
||||
conexion: "postgresql://veterinaria_dev:{password}@localhost:5440/clinica_veterinaria_test"
|
||||
|
||||
staging:
|
||||
host: "${DB_HOST}"
|
||||
puerto: 5432
|
||||
nombre: "clinica_veterinaria_staging"
|
||||
usuario: "veterinaria_staging"
|
||||
password_ref: "DB_PASSWORD en variables de CI/CD"
|
||||
ssl: true
|
||||
pool_size: 20
|
||||
conexion: "postgresql://veterinaria_staging:{password}@${DB_HOST}:5432/clinica_veterinaria_staging?sslmode=require"
|
||||
|
||||
production:
|
||||
host: "${DB_HOST}"
|
||||
puerto: 5432
|
||||
nombre: "clinica_veterinaria_prod"
|
||||
usuario: "veterinaria_prod"
|
||||
password_ref: "DB_PASSWORD en secrets manager"
|
||||
ssl: true
|
||||
pool_size: 50
|
||||
conexion: "postgresql://veterinaria_prod:{password}@${DB_HOST}:5432/clinica_veterinaria_prod?sslmode=require"
|
||||
|
||||
schemas:
|
||||
- nombre: "public"
|
||||
descripcion: "Schema principal PostgreSQL"
|
||||
- nombre: "veterinaria"
|
||||
descripcion: "Entidades especificas veterinarias (especies, razas, mascotas, vacunas)"
|
||||
- nombre: "clinical"
|
||||
descripcion: "Heredado de erp-clinicas (consultorios, citas, historiales)"
|
||||
- nombre: "financial"
|
||||
descripcion: "Heredado de erp-core (pagos, facturacion)"
|
||||
- nombre: "hr"
|
||||
descripcion: "Heredado de erp-core (empleados, nomina)"
|
||||
- nombre: "inventory"
|
||||
descripcion: "Heredado de erp-core (medicamentos, insumos)"
|
||||
|
||||
scripts_inicializacion:
|
||||
orden:
|
||||
- "database/init/00-extensions.sql"
|
||||
- "database/init/01-schemas.sql"
|
||||
- "database/schemas/01-veterinaria-schema-ddl.sql"
|
||||
- "database/seeds/fase8/01-veterinaria-catalogos.sql"
|
||||
|
||||
redis:
|
||||
host_variable: "REDIS_HOST"
|
||||
puerto_variable: "REDIS_PORT"
|
||||
|
||||
ambientes:
|
||||
development:
|
||||
host: "localhost"
|
||||
puerto: 6387
|
||||
database: 0
|
||||
password: ""
|
||||
conexion: "redis://localhost:6387/0"
|
||||
|
||||
production:
|
||||
host: "${REDIS_HOST}"
|
||||
puerto: 6379
|
||||
database: 0
|
||||
password_ref: "REDIS_PASSWORD en secrets"
|
||||
conexion: "redis://:${REDIS_PASSWORD}@${REDIS_HOST}:6379/0"
|
||||
|
||||
uso:
|
||||
- "Cache de sesiones"
|
||||
- "Cache de consultas frecuentes"
|
||||
- "Rate limiting"
|
||||
- "Queue de tareas (Bull)"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# VARIABLES DE ENTORNO - DESARROLLO
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
variables_entorno:
|
||||
archivos:
|
||||
ejemplo: ".env.example"
|
||||
desarrollo: ".env"
|
||||
test: ".env.test"
|
||||
produccion: ".env.production"
|
||||
|
||||
development:
|
||||
- nombre: "NODE_ENV"
|
||||
valor: "development"
|
||||
descripcion: "Ambiente de ejecucion"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "APP_NAME"
|
||||
valor: "clinica-veterinaria"
|
||||
descripcion: "Nombre de la aplicacion"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "APP_VERSION"
|
||||
valor: "1.0.0"
|
||||
descripcion: "Version de la aplicacion"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
# Puertos
|
||||
- nombre: "FRONTEND_PORT"
|
||||
valor: "3120"
|
||||
descripcion: "Puerto del frontend React"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "BACKEND_PORT"
|
||||
valor: "3121"
|
||||
descripcion: "Puerto del backend NestJS"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
# Base de datos
|
||||
- nombre: "DB_HOST"
|
||||
valor: "localhost"
|
||||
descripcion: "Host de PostgreSQL"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "DB_PORT"
|
||||
valor: "5440"
|
||||
descripcion: "Puerto de PostgreSQL"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "DB_NAME"
|
||||
valor: "clinica_veterinaria_dev"
|
||||
descripcion: "Nombre de la base de datos"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "DB_USER"
|
||||
valor: "veterinaria_dev"
|
||||
descripcion: "Usuario de PostgreSQL"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "DB_PASSWORD"
|
||||
valor: ""
|
||||
descripcion: "Password de PostgreSQL"
|
||||
requerido: true
|
||||
sensible: true
|
||||
generacion: "openssl rand -base64 32"
|
||||
|
||||
- nombre: "DATABASE_URL"
|
||||
valor: "postgresql://veterinaria_dev:${DB_PASSWORD}@localhost:5440/clinica_veterinaria_dev"
|
||||
descripcion: "Connection string completo"
|
||||
requerido: true
|
||||
sensible: true
|
||||
|
||||
# Redis
|
||||
- nombre: "REDIS_HOST"
|
||||
valor: "localhost"
|
||||
descripcion: "Host de Redis"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "REDIS_PORT"
|
||||
valor: "6387"
|
||||
descripcion: "Puerto de Redis"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "REDIS_URL"
|
||||
valor: "redis://localhost:6387/0"
|
||||
descripcion: "Connection string de Redis"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
# Autenticacion
|
||||
- nombre: "JWT_SECRET"
|
||||
valor: ""
|
||||
descripcion: "Secreto para firmar JWT (min 32 caracteres)"
|
||||
requerido: true
|
||||
sensible: true
|
||||
generacion: "openssl rand -base64 64"
|
||||
|
||||
- nombre: "JWT_EXPIRES_IN"
|
||||
valor: "24h"
|
||||
descripcion: "Tiempo de expiracion del access token"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "JWT_REFRESH_EXPIRES_IN"
|
||||
valor: "7d"
|
||||
descripcion: "Tiempo de expiracion del refresh token"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
# CORS
|
||||
- nombre: "FRONTEND_URL"
|
||||
valor: "http://localhost:3120"
|
||||
descripcion: "URL del frontend para CORS"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
- nombre: "ALLOWED_ORIGINS"
|
||||
valor: "http://localhost:3120,http://localhost:3121"
|
||||
descripcion: "Origenes permitidos (comma separated)"
|
||||
requerido: true
|
||||
sensible: false
|
||||
|
||||
# Logging
|
||||
- nombre: "LOG_LEVEL"
|
||||
valor: "debug"
|
||||
descripcion: "Nivel de logging (debug, info, warn, error)"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
- nombre: "LOG_FORMAT"
|
||||
valor: "pretty"
|
||||
descripcion: "Formato de logs (pretty, json)"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
# File Storage
|
||||
- nombre: "STORAGE_TYPE"
|
||||
valor: "local"
|
||||
descripcion: "Tipo de storage (local, s3, minio)"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
- nombre: "STORAGE_PATH"
|
||||
valor: "./uploads"
|
||||
descripcion: "Path para almacenamiento local"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
- nombre: "MAX_FILE_SIZE"
|
||||
valor: "10485760"
|
||||
descripcion: "Tamano maximo de archivo en bytes (10MB)"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
# Email (opcional)
|
||||
- nombre: "SMTP_HOST"
|
||||
valor: "localhost"
|
||||
descripcion: "Host SMTP para emails"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
- nombre: "SMTP_PORT"
|
||||
valor: "1025"
|
||||
descripcion: "Puerto SMTP (1025 para MailHog)"
|
||||
requerido: false
|
||||
sensible: false
|
||||
|
||||
production:
|
||||
notas: |
|
||||
En produccion, las siguientes variables deben configurarse
|
||||
via secrets manager o variables de CI/CD:
|
||||
- DB_PASSWORD (secreto)
|
||||
- JWT_SECRET (secreto)
|
||||
- REDIS_PASSWORD (secreto)
|
||||
- AWS_ACCESS_KEY_ID (si usa S3)
|
||||
- AWS_SECRET_ACCESS_KEY (si usa S3)
|
||||
|
||||
diferencias:
|
||||
- nombre: "NODE_ENV"
|
||||
valor: "production"
|
||||
- nombre: "LOG_LEVEL"
|
||||
valor: "info"
|
||||
- nombre: "LOG_FORMAT"
|
||||
valor: "json"
|
||||
- nombre: "DB_PORT"
|
||||
valor: "5432"
|
||||
- nombre: "REDIS_PORT"
|
||||
valor: "6379"
|
||||
- nombre: "STORAGE_TYPE"
|
||||
valor: "s3"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# CONTENEDORES DOCKER
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
docker:
|
||||
compose_file: "docker-compose.yml"
|
||||
compose_dev: "docker-compose.dev.yml"
|
||||
compose_prod: "docker-compose.prod.yml"
|
||||
|
||||
services:
|
||||
- nombre: "db"
|
||||
imagen: "postgres:15-alpine"
|
||||
puerto_host: 5440
|
||||
puerto_container: 5432
|
||||
variables:
|
||||
POSTGRES_DB: "clinica_veterinaria_dev"
|
||||
POSTGRES_USER: "veterinaria_dev"
|
||||
POSTGRES_PASSWORD: "${DB_PASSWORD}"
|
||||
volumes:
|
||||
- "postgres_data:/var/lib/postgresql/data"
|
||||
healthcheck: "pg_isready -U veterinaria_dev"
|
||||
|
||||
- nombre: "redis"
|
||||
imagen: "redis:7-alpine"
|
||||
puerto_host: 6387
|
||||
puerto_container: 6379
|
||||
volumes:
|
||||
- "redis_data:/data"
|
||||
healthcheck: "redis-cli ping"
|
||||
|
||||
- nombre: "mailhog"
|
||||
imagen: "mailhog/mailhog"
|
||||
puerto_smtp: 1025
|
||||
puerto_web: 8025
|
||||
uso: "Testing de emails en desarrollo"
|
||||
|
||||
volumes:
|
||||
- nombre: "postgres_data"
|
||||
descripcion: "Datos persistentes de PostgreSQL"
|
||||
- nombre: "redis_data"
|
||||
descripcion: "Datos persistentes de Redis"
|
||||
|
||||
networks:
|
||||
- nombre: "clinica_veterinaria_network"
|
||||
driver: "bridge"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# MIGRACIONES Y SEEDS
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
migraciones:
|
||||
herramienta: "TypeORM"
|
||||
directorio: "apps/backend/src/database/migrations"
|
||||
|
||||
comandos:
|
||||
generar: "npm run migration:generate -- -n NombreMigracion"
|
||||
ejecutar: "npm run migration:run"
|
||||
revertir: "npm run migration:revert"
|
||||
mostrar: "npm run migration:show"
|
||||
|
||||
seeds:
|
||||
directorio: "database/seeds"
|
||||
orden:
|
||||
- "fase8/01-veterinaria-catalogos.sql"
|
||||
|
||||
comandos:
|
||||
ejecutar: "npm run seed"
|
||||
desarrollo: "npm run seed:dev"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# SCRIPTS DE DESARROLLO
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
scripts:
|
||||
setup:
|
||||
descripcion: "Configurar entorno desde cero"
|
||||
pasos:
|
||||
- comando: "npm install"
|
||||
descripcion: "Instalar dependencias"
|
||||
- comando: "cp .env.example .env"
|
||||
descripcion: "Crear archivo de configuracion"
|
||||
- comando: "docker-compose up -d db redis"
|
||||
descripcion: "Levantar servicios de infraestructura"
|
||||
- comando: "npm run db:create"
|
||||
descripcion: "Crear base de datos"
|
||||
- comando: "npm run migration:run"
|
||||
descripcion: "Ejecutar migraciones"
|
||||
- comando: "npm run seed"
|
||||
descripcion: "Cargar datos iniciales"
|
||||
|
||||
desarrollo:
|
||||
frontend: "cd apps/frontend && npm run dev"
|
||||
backend: "cd apps/backend && npm run start:dev"
|
||||
ambos: "npm run dev:all"
|
||||
docker: "docker-compose up -d"
|
||||
|
||||
testing:
|
||||
unit: "npm run test"
|
||||
unit_watch: "npm run test:watch"
|
||||
e2e: "npm run test:e2e"
|
||||
coverage: "npm run test:cov"
|
||||
|
||||
build:
|
||||
frontend: "cd apps/frontend && npm run build"
|
||||
backend: "cd apps/backend && npm run build"
|
||||
docker: "docker-compose -f docker-compose.prod.yml build"
|
||||
|
||||
database:
|
||||
create: "npm run db:create"
|
||||
drop: "npm run db:drop"
|
||||
reset: "npm run db:reset"
|
||||
migrations_run: "npm run migration:run"
|
||||
migrations_revert: "npm run migration:revert"
|
||||
seed: "npm run seed"
|
||||
|
||||
linting:
|
||||
lint: "npm run lint"
|
||||
lint_fix: "npm run lint:fix"
|
||||
format: "npm run format"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# INSTRUCCIONES DE SETUP
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
setup_instrucciones: |
|
||||
## Setup del Entorno de Desarrollo - Clinica Veterinaria
|
||||
|
||||
### Prerequisitos
|
||||
- Node.js 20.x (LTS)
|
||||
- PostgreSQL 15 (o Docker)
|
||||
- Redis 7 (o Docker)
|
||||
- npm 10.x
|
||||
- Git
|
||||
|
||||
### Opcion 1: Setup con Docker (Recomendado)
|
||||
|
||||
```bash
|
||||
# 1. Clonar repositorio
|
||||
git clone <url_repo>
|
||||
cd clinica-veterinaria
|
||||
|
||||
# 2. Instalar dependencias
|
||||
npm install
|
||||
|
||||
# 3. Configurar variables de entorno
|
||||
cp .env.example .env
|
||||
# Editar .env - generar passwords seguros:
|
||||
# openssl rand -base64 32 # para DB_PASSWORD
|
||||
# openssl rand -base64 64 # para JWT_SECRET
|
||||
|
||||
# 4. Levantar infraestructura
|
||||
docker-compose up -d db redis
|
||||
|
||||
# 5. Crear base de datos y ejecutar migraciones
|
||||
npm run db:create
|
||||
npm run migration:run
|
||||
npm run seed
|
||||
|
||||
# 6. Iniciar desarrollo
|
||||
npm run dev:all
|
||||
```
|
||||
|
||||
### Opcion 2: Setup con PostgreSQL Local
|
||||
|
||||
```bash
|
||||
# 1-3. Igual que arriba
|
||||
|
||||
# 4. Crear usuario y base de datos en PostgreSQL
|
||||
sudo -u postgres psql
|
||||
CREATE USER veterinaria_dev WITH PASSWORD 'tu_password';
|
||||
CREATE DATABASE clinica_veterinaria_dev OWNER veterinaria_dev;
|
||||
GRANT ALL PRIVILEGES ON DATABASE clinica_veterinaria_dev TO veterinaria_dev;
|
||||
\q
|
||||
|
||||
# 5. Configurar Redis local o Docker
|
||||
docker run -d --name redis-veterinaria -p 6387:6379 redis:7-alpine
|
||||
|
||||
# 6-7. Continuar con migraciones y seeds
|
||||
```
|
||||
|
||||
### Verificar Instalacion
|
||||
- Frontend: http://localhost:3120
|
||||
- Backend API: http://localhost:3121/api/v1
|
||||
- Swagger Docs: http://localhost:3121/api/docs
|
||||
- Health Check: http://localhost:3121/health
|
||||
|
||||
### Usuarios de Prueba (despues de seed)
|
||||
- Admin: admin@clinica-vet.local / Admin123!
|
||||
- Veterinario: vet@clinica-vet.local / Vet123!
|
||||
- Recepcion: recepcion@clinica-vet.local / Recep123!
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# TROUBLESHOOTING
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
troubleshooting:
|
||||
- problema: "Puerto 3120 o 3121 en uso"
|
||||
solucion: |
|
||||
Verificar con: lsof -i :3120
|
||||
Terminar proceso: kill -9 <PID>
|
||||
O cambiar puertos en .env
|
||||
|
||||
- problema: "Error de conexion a PostgreSQL"
|
||||
solucion: |
|
||||
1. Verificar que PostgreSQL esta corriendo:
|
||||
docker-compose ps
|
||||
# o: systemctl status postgresql
|
||||
2. Verificar credenciales en .env
|
||||
3. Verificar que la BD existe:
|
||||
psql -h localhost -p 5440 -U veterinaria_dev -l
|
||||
|
||||
- problema: "Error de conexion a Redis"
|
||||
solucion: |
|
||||
1. Verificar que Redis esta corriendo:
|
||||
docker-compose ps
|
||||
# o: redis-cli -p 6387 ping
|
||||
2. Verificar puerto en .env
|
||||
|
||||
- problema: "Migraciones fallan"
|
||||
solucion: |
|
||||
1. Verificar que la BD existe
|
||||
2. Verificar permisos del usuario
|
||||
3. Revisar logs: npm run migration:run --verbose
|
||||
4. Si es necesario, resetear: npm run db:reset
|
||||
|
||||
- problema: "JWT errors"
|
||||
solucion: |
|
||||
Verificar que JWT_SECRET esta configurado (min 32 caracteres)
|
||||
Generar nuevo: openssl rand -base64 64
|
||||
|
||||
- problema: "CORS errors en frontend"
|
||||
solucion: |
|
||||
Verificar FRONTEND_URL y ALLOWED_ORIGINS en .env
|
||||
Deben coincidir con la URL del frontend
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# CONFIGURACION DE PRODUCCION
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
produccion:
|
||||
checklist:
|
||||
- item: "Variables de entorno configuradas via secrets manager"
|
||||
- item: "SSL/TLS habilitado para BD y Redis"
|
||||
- item: "Backups automaticos configurados"
|
||||
- item: "Monitoreo y alertas activas"
|
||||
- item: "Rate limiting configurado"
|
||||
- item: "CORS restringido a dominios autorizados"
|
||||
- item: "Logs en formato JSON para agregacion"
|
||||
|
||||
infraestructura_recomendada:
|
||||
base_de_datos: "AWS RDS PostgreSQL 15 o equivalente"
|
||||
cache: "AWS ElastiCache Redis o equivalente"
|
||||
storage: "AWS S3 o equivalente"
|
||||
cdn: "CloudFront o equivalente"
|
||||
ci_cd: "GitHub Actions / GitLab CI"
|
||||
|
||||
escalado:
|
||||
backend_replicas: 2
|
||||
pool_db_size: 50
|
||||
redis_maxmemory: "256mb"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# REFERENCIAS
|
||||
# -----------------------------------------------------------------------------
|
||||
|
||||
referencias:
|
||||
perfil_devenv: "orchestration/agents/perfiles/PERFIL-DEVENV.md"
|
||||
inventario_master: "orchestration/inventarios/DEVENV-MASTER-INVENTORY.yml"
|
||||
inventario_puertos: "orchestration/inventarios/DEVENV-PORTS-INVENTORY.yml"
|
||||
contexto_proyecto: "orchestration/00-guidelines/CONTEXTO-PROYECTO.md"
|
||||
parent_clinicas: "../erp-clinicas/orchestration/environment/ENVIRONMENT-INVENTORY.yml"
|
||||
schema_veterinaria: "database/schemas/01-veterinaria-schema-ddl.sql"
|
||||
|
||||
# =============================================================================
|
||||
# FIN DE INVENTARIO
|
||||
# =============================================================================
|
||||
443
orchestration/inventarios/DATABASE_INVENTORY.yml
Normal file
443
orchestration/inventarios/DATABASE_INVENTORY.yml
Normal file
@ -0,0 +1,443 @@
|
||||
---
|
||||
# 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)"
|
||||
82
orchestration/inventarios/MASTER_INVENTORY.yml
Normal file
82
orchestration/inventarios/MASTER_INVENTORY.yml
Normal file
@ -0,0 +1,82 @@
|
||||
---
|
||||
# MASTER INVENTORY - Clinica Veterinaria
|
||||
# Version: 1.0.0
|
||||
# Ultima actualizacion: 2026-01-07
|
||||
|
||||
proyecto: "clinica-veterinaria"
|
||||
descripcion: "ERP especializado para clinicas veterinarias"
|
||||
version: "0.1.0"
|
||||
estado: "desarrollo"
|
||||
tipo: "vertical"
|
||||
base: "erp-clinicas"
|
||||
|
||||
progreso:
|
||||
fase_actual: "Database"
|
||||
porcentaje: 15
|
||||
database_completado: true
|
||||
backend_completado: false
|
||||
frontend_completado: false
|
||||
|
||||
herencia:
|
||||
vertical_padre: "erp-clinicas"
|
||||
suite_core: "erp-core"
|
||||
modulos_heredados:
|
||||
- "auth"
|
||||
- "users"
|
||||
- "tenants"
|
||||
- "roles"
|
||||
- "patients"
|
||||
- "appointments"
|
||||
- "billing"
|
||||
|
||||
modulos_especificos:
|
||||
- id: "VET-001"
|
||||
nombre: "mascotas"
|
||||
descripcion: "Registro de animales/pacientes"
|
||||
estado: "ddl_completado"
|
||||
|
||||
- id: "VET-002"
|
||||
nombre: "propietarios"
|
||||
descripcion: "Duenos de mascotas"
|
||||
estado: "ddl_completado"
|
||||
|
||||
- id: "VET-003"
|
||||
nombre: "vacunacion"
|
||||
descripcion: "Cartilla y control de vacunas"
|
||||
estado: "ddl_completado"
|
||||
|
||||
- id: "VET-004"
|
||||
nombre: "hospitalizacion"
|
||||
descripcion: "Control de internamiento"
|
||||
estado: "ddl_completado"
|
||||
|
||||
- id: "VET-005"
|
||||
nombre: "farmacia"
|
||||
descripcion: "Inventario veterinario"
|
||||
estado: "pendiente"
|
||||
|
||||
database:
|
||||
schema: "veterinaria"
|
||||
archivo_ddl: "database/schemas/01-veterinaria-schema-ddl.sql"
|
||||
archivo_seeds: "database/seeds/fase8/01-veterinaria-catalogos.sql"
|
||||
tablas_especificas:
|
||||
- "pets"
|
||||
- "pet_owners"
|
||||
- "vaccinations"
|
||||
- "vaccination_records"
|
||||
- "hospitalizations"
|
||||
- "vet_consultations"
|
||||
|
||||
catalogos:
|
||||
- "especies"
|
||||
- "razas_por_especie"
|
||||
- "vacunas_por_especie"
|
||||
- "especialidades_veterinarias"
|
||||
|
||||
proximas_tareas:
|
||||
- "Implementar backend modulo mascotas"
|
||||
- "Crear frontend para cartilla de vacunacion"
|
||||
- "Integracion con erp-clinicas"
|
||||
|
||||
ultima_actualizacion: "2026-01-07"
|
||||
actualizado_por: "Orquestador"
|
||||
224
orchestration/trazas/REPORTE-EJECUCION-SPRINT7-2026-01-07.md
Normal file
224
orchestration/trazas/REPORTE-EJECUCION-SPRINT7-2026-01-07.md
Normal file
@ -0,0 +1,224 @@
|
||||
# Reporte de Ejecucion - Sprint 7
|
||||
## Clinica Veterinaria Documentation
|
||||
|
||||
**Fecha:** 2026-01-07
|
||||
**Ejecutor:** Claude Opus 4.5 (Orquestador Workspace)
|
||||
**Framework:** NEXUS v4.0 + SIMCO v2.5
|
||||
|
||||
---
|
||||
|
||||
## Resumen Ejecutivo
|
||||
|
||||
Sprint 7 completado exitosamente. Se documentaron los 6 modulos especializados del sistema de clinica veterinaria con especificaciones tecnicas completas, modelo de datos, endpoints API, flujos, y criterios de aceptacion.
|
||||
|
||||
## Tareas Ejecutadas
|
||||
|
||||
| ID | Tarea | Estado | Resultado |
|
||||
|----|-------|--------|-----------|
|
||||
| S7.1 | Explorar estructura | ✅ Completado | Proyecto analizado |
|
||||
| S7.2 | Crear inventarios | ✅ Completado | DATABASE_INVENTORY.yml |
|
||||
| S7.3 | Crear epicas modulos | ✅ Completado | 6 epicas |
|
||||
| S7.4 | Validar Sprint 7 | ✅ Completado | Este reporte |
|
||||
|
||||
## Proyecto Analizado
|
||||
|
||||
### Informacion General
|
||||
|
||||
| Campo | Valor |
|
||||
|-------|-------|
|
||||
| Proyecto | clinica-veterinaria |
|
||||
| Tipo | ERP Especializado (Vertical) |
|
||||
| Base | erp-clinicas |
|
||||
| Suite Core | erp-core |
|
||||
| Estado | Database completado, Backend pendiente |
|
||||
|
||||
### Herencia
|
||||
|
||||
```
|
||||
erp-core
|
||||
└── erp-clinicas
|
||||
└── clinica-veterinaria (VET-001 a VET-006)
|
||||
```
|
||||
|
||||
**Modulos heredados:**
|
||||
- auth, users, tenants, roles (erp-core)
|
||||
- doctors, appointments, consultations (erp-clinicas)
|
||||
|
||||
## Archivos Creados
|
||||
|
||||
### Inventarios (1 archivo)
|
||||
|
||||
| Archivo | Ubicacion | Contenido |
|
||||
|---------|-----------|-----------|
|
||||
| DATABASE_INVENTORY.yml | orchestration/inventarios/ | 2 ENUMs, 3 catalogos, 7 tablas |
|
||||
|
||||
### Epicas (6 archivos)
|
||||
|
||||
| Archivo | Modulo | Estado DDL | Fase |
|
||||
|---------|--------|------------|------|
|
||||
| VET-001-mascotas-propietarios.md | Mascotas + Propietarios | Completado | 1 - Core |
|
||||
| VET-002-vacunacion.md | Cartilla Vacunacion | Completado | 2 - Vacunacion |
|
||||
| VET-003-desparasitaciones.md | Desparasitaciones | Completado | 2 - Vacunacion |
|
||||
| VET-004-hospitalizacion.md | Hospitalizacion | Completado | 3 - Hospitalizacion |
|
||||
| VET-005-estetica.md | Estetica/Grooming | Completado | 4 - Servicios |
|
||||
| VET-006-farmacia.md | Farmacia Veterinaria | Pendiente | 2 - Vacunacion |
|
||||
|
||||
## Modelo de Datos Documentado
|
||||
|
||||
### Schema: veterinaria
|
||||
|
||||
**ENUMs:**
|
||||
| Nombre | Valores |
|
||||
|--------|---------|
|
||||
| sexo_animal | macho, hembra, desconocido |
|
||||
| estado_hospitalizacion | ingresado, en_tratamiento, estable, critico, alta, fallecido |
|
||||
|
||||
**Catalogos:**
|
||||
| Tabla | Descripcion |
|
||||
|-------|-------------|
|
||||
| especies | Catalogo de especies animales |
|
||||
| razas | Razas por especie |
|
||||
| vacunas | Vacunas veterinarias |
|
||||
|
||||
**Tablas Principales:**
|
||||
| Tabla | Descripcion | RLS |
|
||||
|-------|-------------|-----|
|
||||
| propietarios | Duenos de mascotas | Si |
|
||||
| mascotas | Pacientes veterinarios | Si |
|
||||
| cartilla_vacunacion | Historial de vacunas | Si |
|
||||
| desparasitaciones | Historial desparasitaciones | Si |
|
||||
| hospitalizacion | Registro de internados | Si |
|
||||
| hospitalizacion_monitoreo | Signos vitales | Si |
|
||||
| estetica | Servicios grooming | Si |
|
||||
|
||||
## Especies Documentadas
|
||||
|
||||
| Especie | Codigo | Vacunas Tipicas |
|
||||
|---------|--------|-----------------|
|
||||
| Canino | CAN | Quintuple, Rabia, Bordetella |
|
||||
| Felino | FEL | Triple Felina, Leucemia, Rabia |
|
||||
| Ave | AVE | Variable |
|
||||
| Reptil | REP | Sin estandar |
|
||||
| Roedor | ROE | Sin estandar |
|
||||
| Exotico | EXO | Segun especie |
|
||||
|
||||
## Signos Vitales por Especie
|
||||
|
||||
| Especie | Temperatura | FC | FR |
|
||||
|---------|-------------|-----|-----|
|
||||
| Canino | 38-39°C | 60-120 lpm | 10-30 rpm |
|
||||
| Felino | 38-39°C | 120-180 lpm | 20-40 rpm |
|
||||
| Conejo | 38.5-40°C | 130-325 lpm | 30-60 rpm |
|
||||
|
||||
## Endpoints Documentados
|
||||
|
||||
| Modulo | Endpoints |
|
||||
|--------|-----------|
|
||||
| Mascotas | 12 endpoints |
|
||||
| Propietarios | 6 endpoints |
|
||||
| Vacunacion | 10 endpoints |
|
||||
| Desparasitaciones | 6 endpoints |
|
||||
| Hospitalizacion | 9 endpoints |
|
||||
| Estetica | 8 endpoints |
|
||||
| Farmacia | 11 endpoints |
|
||||
| **Total** | **62 endpoints** |
|
||||
|
||||
## Cobertura por Fase
|
||||
|
||||
```
|
||||
Fase 1 - Core: 1 modulo (VET-001)
|
||||
Fase 2 - Vacunacion: 3 modulos (VET-002, VET-003, VET-006)
|
||||
Fase 3 - Hospitalizacion:1 modulo (VET-004)
|
||||
Fase 4 - Servicios: 1 modulo (VET-005)
|
||||
```
|
||||
|
||||
## Dependencias Entre Modulos
|
||||
|
||||
```
|
||||
VET-001 (Mascotas + Propietarios)
|
||||
│
|
||||
├── VET-002 (Vacunacion)
|
||||
│ └── Reportes SENASICA
|
||||
│
|
||||
├── VET-003 (Desparasitaciones)
|
||||
│
|
||||
├── VET-004 (Hospitalizacion)
|
||||
│ └── hospitalizacion_monitoreo
|
||||
│
|
||||
├── VET-005 (Estetica)
|
||||
│
|
||||
└── VET-006 (Farmacia)
|
||||
└── Dispensacion
|
||||
```
|
||||
|
||||
## Integraciones Documentadas
|
||||
|
||||
| Sistema | Proposito | Prioridad |
|
||||
|---------|-----------|-----------|
|
||||
| SENASICA | Reportes vacunacion | P1 |
|
||||
| Laboratorios | Resultados analisis | P1 |
|
||||
| Proveedores | Pedidos medicamentos | P2 |
|
||||
| CFDI 4.0 | Facturacion electronica | P1 |
|
||||
| WhatsApp/SMS | Recordatorios | P2 |
|
||||
|
||||
## Validacion de Calidad
|
||||
|
||||
### Checklist SIMCO
|
||||
|
||||
| Criterio | Status |
|
||||
|----------|--------|
|
||||
| Metadata completa | ✅ |
|
||||
| Objetivos definidos | ✅ |
|
||||
| Alcance claro | ✅ |
|
||||
| Modelo de datos | ✅ |
|
||||
| Endpoints documentados | ✅ |
|
||||
| Interfaz de servicio | ✅ |
|
||||
| Flujos principales | ✅ |
|
||||
| Dependencias mapeadas | ✅ |
|
||||
| Criterios de aceptacion | ✅ |
|
||||
|
||||
### Observaciones
|
||||
- VET-006 (Farmacia) no tiene DDL aun - se propuso estructura
|
||||
- Esquemas de vacunacion documentados por especie
|
||||
- Signos vitales normales por especie incluidos
|
||||
|
||||
## Archivos DDL Existentes
|
||||
|
||||
| Archivo | Lineas | Estado |
|
||||
|---------|--------|--------|
|
||||
| database/schemas/01-veterinaria-schema-ddl.sql | 388 | Completado |
|
||||
| database/seeds/fase8/01-veterinaria-catalogos.sql | - | Referenciado |
|
||||
|
||||
## Metricas del Sprint
|
||||
|
||||
| Metrica | Valor |
|
||||
|---------|-------|
|
||||
| Archivos creados | 7 (1 inventario + 6 epicas) |
|
||||
| Lineas documentadas | ~3,200 |
|
||||
| Endpoints especificados | 62 |
|
||||
| Tablas documentadas | 10 |
|
||||
| ENUMs documentados | 2 |
|
||||
| Especies soportadas | 7 |
|
||||
|
||||
## Proximos Pasos
|
||||
|
||||
1. **Sprint 8:** Consolidacion y validacion final
|
||||
2. **Implementacion DDL:** VET-006 Farmacia
|
||||
3. **Backend:** Modulos VET-001 a VET-006
|
||||
4. **Integracion:** SENASICA automatizado
|
||||
|
||||
## Comparativa con clinica-dental
|
||||
|
||||
| Aspecto | clinica-dental | clinica-veterinaria |
|
||||
|---------|----------------|---------------------|
|
||||
| Pacientes | Humanos (odontogramas) | Animales (multi-especie) |
|
||||
| Catalogos | Piezas dentales FDI | Especies, razas, vacunas |
|
||||
| Especialidades | Ortodoncia, Protesis | Hospitalizacion, Estetica |
|
||||
| Integraciones | Laboratorio dental | SENASICA, Laboratorios |
|
||||
| Tablas DDL | 11 | 10 |
|
||||
| Endpoints | 56 | 62 |
|
||||
|
||||
---
|
||||
|
||||
**Sprint 7 Completado:** 2026-01-07
|
||||
**Validado por:** Orquestador Workspace (NEXUS v4.0)
|
||||
53
orchestration/trazas/TRAZA-TAREAS-DATABASE.md
Normal file
53
orchestration/trazas/TRAZA-TAREAS-DATABASE.md
Normal file
@ -0,0 +1,53 @@
|
||||
# TRAZA DE TAREAS - DATABASE
|
||||
|
||||
**Proyecto:** clinica-veterinaria
|
||||
**Capa:** Database
|
||||
**Version:** 1.0.0
|
||||
|
||||
---
|
||||
|
||||
## HISTORIAL
|
||||
|
||||
### [2026-01-04] VET-DDL-001
|
||||
**Estado:** completado
|
||||
**Agente:** Database-Agent
|
||||
**Duracion:** ~2h
|
||||
|
||||
#### Descripcion
|
||||
Creacion del schema veterinaria con tablas especificas.
|
||||
|
||||
#### Archivos Creados
|
||||
- `database/schemas/01-veterinaria-schema-ddl.sql`
|
||||
|
||||
#### Resultado
|
||||
Schema veterinaria creado con tablas para mascotas, propietarios, vacunacion, hospitalizacion.
|
||||
|
||||
---
|
||||
|
||||
### [2026-01-04] VET-SEEDS-001
|
||||
**Estado:** completado
|
||||
**Agente:** Database-Agent
|
||||
**Duracion:** ~1h
|
||||
|
||||
#### Descripcion
|
||||
Seeds iniciales con catalogos veterinarios.
|
||||
|
||||
#### Archivos Creados
|
||||
- `database/seeds/fase8/01-veterinaria-catalogos.sql`
|
||||
|
||||
#### Resultado
|
||||
Catalogos cargados: especies, razas, vacunas, especialidades.
|
||||
|
||||
---
|
||||
|
||||
## TAREAS PENDIENTES
|
||||
|
||||
| ID | Tarea | Prioridad | Dependencias |
|
||||
|----|-------|-----------|--------------|
|
||||
| VET-DDL-002 | RLS policies para tablas veterinaria | P1 | - |
|
||||
| VET-DDL-003 | Tablas para farmacia veterinaria | P1 | - |
|
||||
| VET-DDL-004 | Funciones de alertas de vacunacion | P2 | - |
|
||||
|
||||
---
|
||||
|
||||
**Ultima actualizacion:** 2026-01-07
|
||||
Loading…
Reference in New Issue
Block a user