# Modelo de Datos: Stock **Modulo:** stock **Total Modelos:** 30+ **Modelos Documentados:** 8 (principales) --- ## 1. Indice de Modelos Principales | Modelo | Descripcion | Campos | Archivo | |--------|-------------|--------|---------| | stock.move | Movimientos | 40+ | stock_move.py | | stock.move.line | Lineas operacion | 25+ | stock_move_line.py | | stock.picking | Albaranes | 35+ | stock_picking.py | | stock.location | Ubicaciones | 20+ | stock_location.py | | stock.warehouse | Almacenes | 30+ | stock_warehouse.py | | stock.quant | Cantidades | 20+ | stock_quant.py | | stock.rule | Reglas procura | 15+ | stock_rule.py | | stock.lot | Lotes/SN | 10+ | stock_lot.py | --- ## 2. Detalle por Modelo ### 2.1 stock.move (Movimientos) **Archivo:** `models/stock_move.py` **Descripcion:** Stock Move **Hereda de:** - (modelo independiente) #### Estado (state) | Estado | Descripcion | |--------|-------------| | draft | Nuevo | | waiting | Esperando otro movimiento | | confirmed | Esperando disponibilidad | | partially_available | Parcialmente disponible | | assigned | Disponible/Reservado | | done | Completado | | cancel | Cancelado | #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | sequence | Integer | No | Secuencia (default=10) | | state | Selection | Si | Estado del movimiento | | date | Datetime | Si | Fecha programada | | product_id | Many2one | Si | Producto | | product_qty | Float | No | Cantidad real (computed) | | product_uom_qty | Float | Si | Cantidad demandada | | product_uom | Many2one | Si | Unidad de medida | | location_id | Many2one | Si | Ubicacion origen | | location_dest_id | Many2one | Si | Ubicacion destino | | picking_id | Many2one | No | Albaran asociado | | company_id | Many2one | Si | Empresa | | partner_id | Many2one | No | Direccion destino | #### Campos de Cadena | Campo | Tipo | Descripcion | |-------|------|-------------| | move_orig_ids | Many2many | Movimientos origen (cadena) | | move_dest_ids | Many2many | Movimientos destino (cadena) | | rule_id | Many2one | Regla que lo creo | | picking_type_id | Many2one | Tipo de operacion | | route_ids | Many2many | Rutas preferidas | | move_line_ids | One2many | Lineas de operacion | --- ### 2.2 stock.move.line (Lineas de Operacion) **Archivo:** `models/stock_move_line.py` **Descripcion:** Product Moves (Detailed Operations) #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | move_id | Many2one | No | Movimiento padre | | picking_id | Many2one | No | Albaran | | product_id | Many2one | Si | Producto | | product_uom_id | Many2one | Si | Unidad de medida | | quantity | Float | Si | Cantidad hecha | | quantity_product_uom | Float | No | Cantidad en UoM producto | | lot_id | Many2one | No | Lote/Numero de serie | | lot_name | Char | No | Nombre del lote | | package_id | Many2one | No | Paquete origen | | result_package_id | Many2one | No | Paquete destino | | owner_id | Many2one | No | Propietario | | location_id | Many2one | Si | Ubicacion origen | | location_dest_id | Many2one | Si | Ubicacion destino | | state | Selection | No | Estado (related) | --- ### 2.3 stock.picking (Albaranes/Transferencias) **Archivo:** `models/stock_picking.py` **Descripcion:** Transfer **Hereda de:** mail.thread, mail.activity.mixin #### Estado (state) | Estado | Descripcion | |--------|-------------| | draft | Borrador | | waiting | Esperando otra operacion | | confirmed | Esperando disponibilidad | | assigned | Listo | | done | Completado | | cancel | Cancelado | #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | No | Referencia (secuencial) | | state | Selection | No | Estado (computed) | | picking_type_id | Many2one | Si | Tipo de operacion | | picking_type_code | Selection | No | Codigo tipo (related) | | move_type | Selection | Si | Politica envio | | location_id | Many2one | Si | Ubicacion origen | | location_dest_id | Many2one | Si | Ubicacion destino | | move_ids | One2many | No | Movimientos | | move_line_ids | One2many | No | Lineas detalladas | | partner_id | Many2one | No | Contacto | | company_id | Many2one | No | Empresa (related) | #### Campos de Fecha | Campo | Tipo | Descripcion | |-------|------|-------------| | scheduled_date | Datetime | Fecha programada (computed) | | date_deadline | Datetime | Fecha limite | | date_done | Datetime | Fecha de ejecucion | #### Campos Adicionales | Campo | Tipo | Descripcion | |-------|------|-------------| | priority | Selection | Prioridad (0=Normal, 1=Urgente) | | user_id | Many2one | Responsable | | owner_id | Many2one | Propietario asignado | | is_locked | Boolean | Bloqueado (default=True) | | backorder_id | Many2one | Albaran original (backorder) | | signature | Image | Firma | | printed | Boolean | Impreso | --- ### 2.4 stock.location (Ubicaciones) **Archivo:** `models/stock_location.py` **Descripcion:** Inventory Locations **Estructura:** Jerarquica (_parent_store) #### Tipos de Ubicacion (usage) | Tipo | Descripcion | Virtual | |------|-------------|---------| | supplier | Proveedores | Si | | view | Virtual/Jerarquica | Si | | internal | Interna fisica | No | | customer | Clientes | Si | | inventory | Ajustes inventario | Si | | production | Produccion | Si | | transit | Transito | Si | #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre | | complete_name | Char | No | Nombre completo (computed) | | usage | Selection | Si | Tipo de ubicacion | | location_id | Many2one | No | Ubicacion padre | | child_ids | One2many | No | Ubicaciones hijas | | parent_path | Char | No | Ruta de padres (indexed) | | company_id | Many2one | No | Empresa | | barcode | Char | No | Codigo de barras | | active | Boolean | No | Activo | #### Campos de Configuracion | Campo | Tipo | Descripcion | |-------|------|-------------| | replenish_location | Boolean | Trigger reposicion | | removal_strategy_id | Many2one | Estrategia extraccion | | putaway_rule_ids | One2many | Reglas ubicacion | | storage_category_id | Many2one | Categoria almacenamiento | | cyclic_inventory_frequency | Integer | Frecuencia inventario (dias) | --- ### 2.5 stock.warehouse (Almacenes) **Archivo:** `models/stock_warehouse.py` **Descripcion:** Warehouse #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre | | code | Char | Si | Codigo corto (5 chars) | | company_id | Many2one | Si | Empresa | | partner_id | Many2one | No | Direccion | | active | Boolean | No | Activo | | sequence | Integer | No | Secuencia | #### Ubicaciones del Almacen | Campo | Tipo | Descripcion | |-------|------|-------------| | view_location_id | Many2one | Ubicacion raiz | | lot_stock_id | Many2one | Stock principal | | wh_input_stock_loc_id | Many2one | Entrada | | wh_qc_stock_loc_id | Many2one | Control calidad | | wh_output_stock_loc_id | Many2one | Salida | | wh_pack_stock_loc_id | Many2one | Empaque | #### Configuracion de Flujos | Campo | Tipo | Descripcion | |-------|------|-------------| | reception_steps | Selection | Pasos recepcion (1/2/3) | | delivery_steps | Selection | Pasos entrega (1/2/3) | | route_ids | Many2many | Rutas por defecto | #### Tipos de Operacion | Campo | Tipo | Descripcion | |-------|------|-------------| | in_type_id | Many2one | Tipo recepcion | | out_type_id | Many2one | Tipo envio | | int_type_id | Many2one | Tipo interno | | pick_type_id | Many2one | Tipo pick | | pack_type_id | Many2one | Tipo empaque | --- ### 2.6 stock.quant (Cantidades) **Archivo:** `models/stock_quant.py` **Descripcion:** Quants #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | product_id | Many2one | Si | Producto | | product_tmpl_id | Many2one | No | Plantilla (related) | | location_id | Many2one | Si | Ubicacion | | warehouse_id | Many2one | No | Almacen (related) | | lot_id | Many2one | No | Lote/SN | | package_id | Many2one | No | Paquete | | owner_id | Many2one | No | Propietario | | company_id | Many2one | No | Empresa (related) | #### Campos de Cantidad | Campo | Tipo | Descripcion | |-------|------|-------------| | quantity | Float | Cantidad actual (readonly) | | reserved_quantity | Float | Cantidad reservada (readonly) | | available_quantity | Float | Cantidad disponible (computed) | | in_date | Datetime | Fecha de entrada | #### Campos de Inventario | Campo | Tipo | Descripcion | |-------|------|-------------| | inventory_quantity | Float | Cantidad contada | | inventory_date | Date | Fecha programada | | inventory_diff_quantity | Float | Diferencia (computed) | | last_count_date | Date | Ultimo conteo | | user_id | Many2one | Usuario asignado | --- ### 2.7 stock.rule (Reglas de Procura) **Archivo:** `models/stock_rule.py` **Descripcion:** Stock Rule #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Nombre | | active | Boolean | No | Activo | | action | Selection | Si | Accion (pull/push/pull_push) | | sequence | Integer | No | Secuencia | | route_id | Many2one | Si | Ruta | | location_src_id | Many2one | No | Ubicacion origen | | location_dest_id | Many2one | Si | Ubicacion destino | | picking_type_id | Many2one | Si | Tipo operacion | | procure_method | Selection | Si | Metodo procura | | company_id | Many2one | No | Empresa | | warehouse_id | Many2one | No | Almacen | | delay | Integer | No | Tiempo entrega (dias) | | auto | Selection | No | Automatizacion | | propagate_cancel | Boolean | No | Propagar cancelacion | --- ### 2.8 stock.lot (Lotes/Numeros de Serie) **Archivo:** `models/stock_lot.py` **Descripcion:** Lot/Serial #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Lote/SN | | ref | Char | No | Referencia interna | | product_id | Many2one | Si | Producto | | product_qty | Float | No | Cantidad en mano (computed) | | company_id | Many2one | Si | Empresa | | expiration_date | Datetime | No | Fecha expiracion | | use_date | Datetime | No | Mejor antes de | | removal_date | Datetime | No | Fecha remocion | | alert_date | Datetime | No | Fecha alerta | | quant_ids | One2many | No | Cantidades | --- ## 3. Diagrama Entidad-Relacion ``` ┌───────────────────────┐ move_ids ┌───────────────────────┐ │ stock.picking │────────────────────►│ stock.move │ │ │ │ │ │ - name │ picking_id │ - state │ │ - state │◄─────────────────────│ - product_id │ │ - picking_type_id │ │ - product_qty │ │ - scheduled_date │ │ - location_id │ └───────────┬───────────┘ │ - location_dest_id │ │ └───────────┬───────────┘ │ picking_type_id │ ▼ move_line_ids ┌───────────────────────┐ ▼ │ stock.picking.type │ ┌───────────────────────┐ │ │ │ stock.move.line │ │ - code │ │ │ │ - warehouse_id │ │ - quantity │ │ - reservation_method │ │ - lot_id │ └───────────────────────┘ │ - package_id │ └───────────────────────┘ ┌───────────────────────┐ lot_stock_id ┌───────────────────────┐ │ stock.warehouse │────────────────────►│ stock.location │ │ │ │ │ │ - code │ warehouse_id │ - usage │ │ - reception_steps │◄─────────────────────│ - location_id │ │ - delivery_steps │ │ - parent_path │ └───────────────────────┘ └───────────┬───────────┘ │ location_id │ ▼ ┌───────────────────────┐ ┌───────────────────────┐ │ stock.quant │────────────────────►│ product.product │ │ │ product_id │ │ │ - quantity │ │ (from product) │ │ - reserved_quantity │ └───────────────────────┘ │ - location_id │ │ - lot_id │ └───────────────────────┘ ┌───────────────────────┐ route_id ┌───────────────────────┐ │ stock.rule │────────────────────►│ stock.route │ │ │ │ │ │ - action │ │ - name │ │ - procure_method │ │ - product_selectable │ │ - location_src_id │ │ - warehouse_selectable│ │ - location_dest_id │ └───────────────────────┘ └───────────────────────┘ ``` --- **Referencias:** - Carpeta models: `addons/stock/models/`