Matriz: tipos de documento e inventario
Referencia para alinear getInventoryOperation (documentInventoryService.js), el kardex (getProductMovements en inventoryMovementController.js) y INVENTORY_TYPES en updateDocument (documentController.js).
Operación de inventario por tipo (getInventoryOperation)
| Tipo | Operación add / reduce / none | Notas |
|---|---|---|
| 103 | add | Compra. Las líneas con sourceDocumentId de una recepción (116) se saltan: el stock ya entró con la recepción |
| 104 | add | Importación (costo importCostEnd preferido) |
| 116 | add | Recepción de mercadería. Nace confirmada, no se edita ni se desconfirma; se corrige anulando |
| 01, 112 | reduce | Venta / entrega |
| 06 | add | Nota de crédito (reingreso) |
| 07, 105 | reduce | Nota de débito / devolución según caso |
| 106 | add | Ajuste (cantidad con signo en línea) |
| 100, 101, 102, 11, 113, 114, 115, 05, 107, 108 | none | Sin movimiento de inventario en este servicio |
Tipos no listados en el switch lanzan error (“Tipo de documento no soportado”).
Momento de aplicación al crear documento
- Tras crear líneas, si no hay análisis IA, se llama
processInventoryUpdate(mismo archivo servicio). - Con IA, el inventario puede aplicarse al confirmar según
confirmDocument(no duplicar con el alta).
Edición de documento (updateDocument)
- La constante
INVENTORY_TYPES = ['103','105','106','07']solo incluye tipos que este endpoint permite editar y para los que tiene sentido revertir/reaplicar stock en la misma transacción. - No incluye
01,104,112, etc.: esos flujos fiscales/ventas no pasan por la misma edición de líneas; cambiar ahí sin actualizar esta lista produciría desfase stock–documento. 116es inmutable:updateDocumentla rechaza conGOODS_RECEIPT_IMMUTABLE, así que nunca entra en esta reversión.
Recepción de mercadería (116) → factura de compra (103)
- La recepción suma stock al guardarse y contabiliza inventario contra la cuenta puente "Mercadería recibida por facturar".
- La factura toma las líneas pendientes (
sourceDocumentId/sourceLineIdde la recepción). Esas líneas no mueven stock otra vez y descargan la cuenta puente en lugar de la cuenta de compras; la diferencia entre el costo recibido y el facturado va a "Diferencia de precio en compras". - Anular la recepción revierte el stock y el asiento; se bloquea si alguna línea ya fue facturada.
- El kardex y el reporte de análisis de movimientos excluyen las líneas de 103 que provienen de una 116.
Movimientos manuales
- Tipos: ingreso, salida, transferencia, revalorización (ver
inventoryMovementController.js). - Bundles en catálogo: rechazados en movimiento manual; en documentos se expanden a componentes.
Conciliación y kardex
- La reconciliación de stock (
getStockReconciliation) y el kardex unificado deben usar la misma noción de “documento que aplica stock” que el literal SQL engetProductMovements(confirmación,wasUnconfirmed, IA en 103).
Última actualización: alineada con la implementación del backend en el repositorio (revisar el código ante cambios de tipos o reglas de confirmación).