workspace-v1/shared/knowledge-base/reference/odoo/docs/04-logica-negocio/FLUJO-stock.md
rckrdmrd cb4c0681d3 feat(workspace): Add new projects and update architecture
New projects created:
- michangarrito (marketplace mobile)
- template-saas (SaaS template)
- clinica-dental (dental ERP)
- clinica-veterinaria (veterinary ERP)

Architecture updates:
- Move catalog from core/ to shared/
- Add MCP servers structure and templates
- Add git management scripts
- Update SUBREPOSITORIOS.md with 15 new repos
- Update .gitignore for new projects

Repository infrastructure:
- 4 main repositories
- 11 subrepositorios
- Gitea remotes configured

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 04:43:28 -06:00

12 KiB

Flujo de Negocio: Stock (Inventario)

Modulo: stock Modelo Principal: stock.picking, stock.move Aplica Workflow: Si


1. Estados del Movimiento (stock.move.state)

Estado Nombre UI Descripcion Siguiente
draft Nuevo Estado inicial, no confirmado confirmed
waiting Esperando Esperando otro movimiento (cadena) confirmed
confirmed En espera Confirmado, sin disponibilidad assigned
partially_available Parcial Parcialmente reservado assigned
assigned Disponible Stock reservado done
done Completado Movimiento ejecutado -
cancel Cancelado Movimiento cancelado -

2. Estados del Albaran (stock.picking.state)

Estado Nombre UI Descripcion Siguiente
draft Borrador Estado inicial confirmed
waiting En espera Esperando otra operacion confirmed/assigned
confirmed En espera Esperando disponibilidad assigned
assigned Listo Stock reservado, listo para procesar done
done Completado Albaran validado -
cancel Cancelado Albaran cancelado -

3. Diagrama de Transiciones - stock.picking

                    ┌──────────────────┐
                    │      DRAFT       │
                    │   (Borrador)     │
                    └────────┬─────────┘
                             │
                     action_confirm()
                             │
              ┌──────────────┴──────────────┐
              │                             │
              ▼                             ▼
    ┌──────────────────┐        ┌──────────────────┐
    │    CONFIRMED     │        │     WAITING      │
    │   (En espera)    │        │ (Otra operacion) │
    └────────┬─────────┘        └────────┬─────────┘
             │                           │
             │    action_assign()        │ (dependencia resuelta)
             │                           │
             └──────────────┬────────────┘
                            │
                            ▼
                  ┌──────────────────┐
                  │     ASSIGNED     │
                  │     (Listo)      │
                  └────────┬─────────┘
                           │
                  button_validate()
                   _action_done()
                           │
                           ▼
                  ┌──────────────────┐
                  │       DONE       │
                  │  (Completado)    │
                  └──────────────────┘

Estado paralelo (desde cualquier estado excepto done):
                  ┌──────────────────┐
                  │      CANCEL      │
                  │   (Cancelado)    │
                  └──────────────────┘

4. Diagrama de Transiciones - stock.move

                    ┌──────────────────┐
                    │      DRAFT       │
                    │     (Nuevo)      │
                    └────────┬─────────┘
                             │
                   _action_confirm()
                             │
              ┌──────────────┴──────────────┐
              │                             │
              ▼                             ▼
    ┌──────────────────┐        ┌──────────────────┐
    │    CONFIRMED     │        │     WAITING      │
    │   (En espera)    │        │ (Otro movimiento)│
    └────────┬─────────┘        └────────┬─────────┘
             │                           │
             │    _action_assign()       │
             │                           │
             └──────────────┬────────────┘
                            │
             ┌──────────────┼──────────────┐
             │              │              │
             ▼              ▼              ▼
    (sin stock)    (stock parcial)   (stock completo)
             │              │              │
             │              ▼              │
             │    ┌─────────────────┐      │
             │    │ PARTIALLY_AVAIL │      │
             │    │   (Parcial)     │      │
             │    └────────┬────────┘      │
             │             │               │
             └─────────────┼───────────────┘
                           │
                           ▼
                  ┌──────────────────┐
                  │     ASSIGNED     │
                  │  (Disponible)    │
                  └────────┬─────────┘
                           │
                    _action_done()
                           │
                           ▼
                  ┌──────────────────┐
                  │       DONE       │
                  │  (Completado)    │
                  └──────────────────┘

5. Flujo de Recepcion (Entrada de Proveedor)

1. CREACION
   └─ stock.picking creado con picking_type_code='incoming'
   └─ move_ids con state = 'draft'

2. CONFIRMACION (action_confirm)
   └─ Confirma todos los movimientos
   └─ picking.state = 'confirmed' o 'assigned'
   └─ move.state = 'confirmed'

3. ASIGNACION (action_assign)
   └─ Para recepciones: generalmente pasa directo a assigned
   └─ No requiere reserva de stock (entra nuevo)
   └─ picking.state = 'assigned'
   └─ move.state = 'assigned'

4. OPERACION
   └─ Operario registra en move_line_ids
   └─ Asigna quantity_done
   └─ Opcionalmente asigna lot_id

5. VALIDACION (button_validate)
   └─ _action_done() ejecutado
   └─ stock.quant creado/actualizado
   └─ quantity incrementada en ubicacion destino
   └─ picking.state = 'done'
   └─ move.state = 'done'

6. Flujo de Envio (Salida a Cliente)

1. CREACION
   └─ stock.picking creado con picking_type_code='outgoing'
   └─ move_ids con state = 'draft'

2. CONFIRMACION (action_confirm)
   └─ Confirma movimientos
   └─ picking.state = 'confirmed'
   └─ Inicia proceso de reserva segun picking_type.reservation_method

3. VERIFICACION DISPONIBILIDAD (action_assign)
   └─ Busca stock en ubicacion origen
   └─ Crea reservas en stock.quant (reserved_quantity)

   Si stock completo:
   └─ move.state = 'assigned'
   └─ picking.state = 'assigned'

   Si stock parcial:
   └─ move.state = 'partially_available'
   └─ picking.state = 'confirmed' (esperando)

   Si sin stock:
   └─ move.state = 'confirmed'
   └─ picking.state = 'waiting' o 'confirmed'

4. OPERACION (Picking)
   └─ Operario escanea/selecciona productos
   └─ Registra quantity_done en move_line_ids
   └─ Puede crear paquetes (action_put_in_pack)

5. VALIDACION (button_validate)
   └─ Si quantity_done < product_uom_qty:
      └─ Opcion de crear backorder
   └─ _action_done() ejecutado
   └─ stock.quant.quantity reducida en origen
   └─ Reservas liberadas
   └─ picking.state = 'done'

7. Flujo de Transferencia Interna

1. CREACION
   └─ stock.picking con picking_type_code='internal'
   └─ location_id = origen interno
   └─ location_dest_id = destino interno

2. CONFIRMACION
   └─ Similar a envio

3. ASIGNACION
   └─ Reserva stock en ubicacion origen

4. OPERACION
   └─ Mueve fisicamente productos

5. VALIDACION
   └─ Reduce quant en origen
   └─ Incrementa quant en destino
   └─ Sin cambio en stock total del almacen

8. Metodos de Transicion

stock.picking

Metodo De Estado A Estado Descripcion
action_confirm() draft confirmed/waiting Confirma albaran
action_assign() confirmed assigned Reserva stock
action_cancel() * cancel Cancela
button_validate() assigned done Valida/completa
_action_done() * done Marca completado

stock.move

Metodo De Estado A Estado Descripcion
_action_confirm() draft confirmed Confirma movimiento
_action_assign() confirmed assigned Reserva
_action_cancel() * cancel Cancela
_action_done() assigned done Ejecuta

9. Reglas de Negocio

ID Regla Validacion Mensaje
R1 Producto requerido product_id presente Producto requerido
R2 Cantidad positiva product_uom_qty > 0 Cantidad debe ser positiva
R3 Ubicaciones validas location_id y location_dest_id Ubicaciones requeridas
R4 Stock disponible quant.available_quantity >= qty Sin stock disponible
R5 Lote requerido Si tracking='lot'/'serial' Lote/SN requerido
R6 SN unico Si tracking='serial', qty=1 SN no acepta qty > 1

10. Acciones Automaticas

Trigger Accion Condicion
action_confirm Generar nombre secuencial Si name = '/'
action_confirm Reservar automatico Si reservation_method = 'at_confirm'
button_validate Crear backorder Si create_backorder = 'always'
button_validate Actualizar quants Siempre
_action_done Propagar a cadena Si move_dest_ids
Scheduler action_assign Periodico

11. Permisos por Estado

Estado Editable Grupos
draft Si stock.group_stock_user
confirmed Parcial stock.group_stock_user
waiting No -
assigned Operacion stock.group_stock_user
done No stock.group_stock_manager (forzar)
cancel No -

12. Flujo de Backorder

ALBARAN ORIGINAL (picking_1)
    │
    │ button_validate() con cantidad parcial
    │ create_backorder='always' o 'ask'
    │
    ├─► ALBARAN COMPLETADO (picking_1)
    │       state = 'done'
    │       Cantidades procesadas
    │
    └─► BACKORDER (picking_2)
            state = 'confirmed' o 'assigned'
            backorder_id = picking_1
            Cantidades pendientes

13. Flujo de Cadena de Movimientos

REGLA MTO (Make-to-Order)
    │
    │ Crea movimiento con procure_method='make_to_order'
    │
    ▼
MOVIMIENTO 1 (move_orig)
    state = 'waiting' (espera movimiento origen)
    │
    │ move_orig_ids completado
    │
    ▼
MOVIMIENTO 2 (move_dest)
    state = 'confirmed' → 'assigned'

14. Sistema de Reservas (Quants)

RESERVA DE STOCK
    │
    ▼
stock.quant
    ├─ quantity = 100 (total)
    ├─ reserved_quantity = 30 (reservado)
    └─ available_quantity = 70 (computed)

PROCESO:
1. action_assign() busca quants disponibles
2. Incrementa reserved_quantity
3. Crea stock.move.line vinculado
4. Al validar: reduce quantity, libera reserved_quantity

15. Estrategias de Extraccion

Estrategia Descripcion Uso
fifo First In First Out Productos perecederos
lifo Last In First Out Apilamiento
closest Mas cercano Optimizacion ruta
fefo First Expiry First Out Con fechas expiracion

Referencias:

  • stock_picking.py: action_confirm, action_assign, button_validate
  • stock_move.py: _action_confirm, _action_assign, _action_done
  • stock_quant.py: _update_available_quantity