Stock y transferencias
Todo movimiento de inventario en Oxitesa pasa por un solo procedimiento:
finances.sp_transfer_supply_to_entity. Es el "verbo" base del sistema de stock.
La primitiva
sp_transfer_supply_to_entity(supply, entidad destino, estado destino, …)
Lo llaman sp_close_delivery, sp_close_visit, sp_close_retirement y los flujos de carga y
devolución de vehículo. Si estás escribiendo código que mueve stock y no termina acá, algo está
mal.
Qué hace, en orden
Un elemento descartable que viaja con un inventariable (por ejemplo una tubuladura que acompaña
a un concentrador) no cambia su ATENTITYID: se consume. Confundir esto duplicaba stock
fantasma en los depósitos.
Errores: SUPPLY_NOT_FOUND, MOVEMENT_STATUS_AVL_NOT_FOUND.
Los estados del supply
Códigos de EntityStatus con ENTITYCODE = 4 (SUPPLY):
| Código | Significado |
|---|---|
AVL | Disponible |
USE | En uso (con el paciente) |
MTN | En mantenimiento — es el estado con el que vuelve lo retirado |
TRS | En tránsito |
DMG | Dañado |
LST | Perdido |
DSC | Descartado |
OOS | Sin stock |
Cadena de movimientos válidos
DEPÓSITO → PACIENTE : USE
DEPÓSITO → DEPÓSITO : AVL | LST | DMG | DSC
DEPÓSITO → TALLER : MTN
DEPÓSITO ↔ VEHÍCULO : AVL
PACIENTE → DEPÓSITO : AVL | DMG | DSC | LST
PACIENTE → TALLER : MTN
TALLER → DEPÓSITO : AVL | DMG | DSC
Validación de stock
sp_validate_stocks_v2 es el helper que corre antes de aceptar líneas que reservan stock.
Tres cosas para saber:
- Lee una view, no la tabla. Consulta
finances.view_stock_detail_by_origin, nuncaSUPPLIESdirecto. Si el stock disponible "no da" y en la tabla parece que sí, mirá la view. - Matchea por
productIdexacto o por elemento cuando elproductIdvieneNULL. - Balance acumulado: varias líneas del mismo producto o elemento en la misma corrida se restan secuencialmente, no cada una contra el stock inicial.
No tiene OUT params: es side-effect-only y deja el resultado en la temp tmp_stock_validation, que
el caller inspecciona.
Las views de stock
| View | Para qué |
|---|---|
view_stock_detail_by_origin | La que consume la validación de stock |
view_stock_detail_by_entity | Stock agrupado por entidad tenedora |
Las de views/deprecated/ (view_stock_detail, view_stock_in_vehicles, y sus _v2) no se
usan.
Reclasificación de genéricos
sp_reclassify_generic_supplies corrige el producto real de un supply cargado como "Genérico"
seriado, usando el prefijo del número de serie contra una tabla de reglas (elemento, prefijo) → SKU.
Se invoca desde el cierre de retiro y de visita, y también existe como backfill para corregir datos históricos.
Hay familias donde el prefijo es ambiguo y no alcanza para resolver el producto. Esos casos quedan como genéricos a propósito: no inventes una regla sin validarla contra datos reales del ambiente.
Reservas
SUPPLIESRESERVATION bloquea stock para un remito en preparación sin bajarlo. Se crea al aceptar
y se libera al cerrar (o al cancelar el remito / la tarea).
Un desajuste típico de stock es una reserva que quedó viva después de cancelar algo. Si el stock disponible es menor al físico, revisá reservas huérfanas antes que movimientos.
Detalle operativo
La skill sp-transfer-supply-to-entity y sp-validate-stocks-v2 en
oxitesa-backend/.claude/skills/ tienen el paso a paso de cada sección y todos los códigos de error.