- Epicas documentadas - Schema de farmacia veterinaria - Inventario de base de datos - Reporte de ejecucion Sprint 7 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.5 KiB
8.5 KiB
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
- Inventario de medicamentos
- Control de lotes y caducidades
- Dispensacion con receta
- Medicamentos controlados
- 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
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
// 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
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)