# Modelo de Datos: Purchase **Modulo:** purchase **Total Modelos:** 8+ **Modelos Documentados:** 3 (principales) --- ## 1. Indice de Modelos Principales | Modelo | Descripcion | Campos | Archivo | |--------|-------------|--------|---------| | purchase.order | Orden de compra | 50+ | purchase_order.py | | purchase.order.line | Linea de orden | 30+ | purchase_order_line.py | | purchase.bill.line.match | Match facturas | 10+ | purchase_bill_line_match.py | --- ## 2. Detalle por Modelo ### 2.1 purchase.order (Orden de Compra) **Archivo:** `models/purchase_order.py` **Descripcion:** Purchase Order **Hereda de:** portal.mixin, product.catalog.mixin, mail.thread, mail.activity.mixin #### Estado (state) | Estado | Nombre UI | Descripcion | |--------|-----------|-------------| | draft | RFQ | Solicitud de cotizacion | | sent | RFQ Sent | Enviada al proveedor | | to approve | To Approve | Pendiente aprobacion | | purchase | Purchase Order | Confirmada | | cancel | Cancelled | Cancelada | #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | name | Char | Si | Referencia de orden | | priority | Selection | No | Prioridad (0=Normal, 1=Urgente) | | origin | Char | No | Documento origen | | partner_ref | Char | No | Referencia del proveedor | | date_order | Datetime | Si | Fecha limite de orden | | date_approve | Datetime | No | Fecha de confirmacion | | date_planned | Datetime | No | Fecha esperada llegada | | state | Selection | Si | Estado | | locked | Boolean | No | Orden bloqueada | #### Campos de Proveedor | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | partner_id | Many2one | Si | Proveedor | | dest_address_id | Many2one | No | Direccion dropship | | user_id | Many2one | No | Comprador responsable | #### Campos Monetarios | Campo | Tipo | Descripcion | |-------|------|-------------| | currency_id | Many2one | Moneda | | amount_untaxed | Monetary | Subtotal (computed) | | amount_tax | Monetary | Impuestos (computed) | | amount_total | Monetary | Total (computed) | | amount_total_cc | Monetary | Total en moneda empresa | #### Campos de Facturacion | Campo | Tipo | Descripcion | |-------|------|-------------| | invoice_ids | Many2many | Facturas vinculadas | | invoice_count | Integer | Cantidad de facturas | | invoice_status | Selection | Estado facturacion | #### Campos de Lineas | Campo | Tipo | Descripcion | |-------|------|-------------| | order_line | One2many | Lineas de orden | #### Campos de Configuracion | Campo | Tipo | Descripcion | |-------|------|-------------| | fiscal_position_id | Many2one | Posicion fiscal | | payment_term_id | Many2one | Terminos de pago | | incoterm_id | Many2one | Incoterm | | company_id | Many2one | Empresa | | acknowledged | Boolean | Acuse de recibo | --- ### 2.2 purchase.order.line (Linea de Orden) **Archivo:** `models/purchase_order_line.py` **Descripcion:** Purchase Order Line #### Campos Principales | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | order_id | Many2one | Si | Orden padre | | sequence | Integer | No | Secuencia | | product_id | Many2one | No | Producto | | product_template_id | Many2one | No | Plantilla producto | | name | Text | Si | Descripcion | | date_planned | Datetime | Si | Fecha esperada | | display_type | Selection | No | Tipo display (section/note) | #### Campos de Cantidad | Campo | Tipo | Descripcion | |-------|------|-------------| | product_qty | Float | Cantidad ordenada | | product_uom | Many2one | Unidad de medida | | qty_received | Float | Cantidad recibida | | qty_received_manual | Float | Recibida manual | | qty_invoiced | Float | Cantidad facturada | | qty_to_invoice | Float | Pendiente facturar | #### Campos de Precio | Campo | Tipo | Descripcion | |-------|------|-------------| | price_unit | Float | Precio unitario | | price_subtotal | Monetary | Subtotal (computed) | | price_total | Monetary | Total con impuestos | | price_tax | Float | Impuestos | | discount | Float | Descuento % | #### Campos de Impuestos | Campo | Tipo | Descripcion | |-------|------|-------------| | taxes_id | Many2many | Impuestos aplicables | | tax_calculation_rounding_method | Selection | Metodo redondeo | #### Campos de Facturacion | Campo | Tipo | Descripcion | |-------|------|-------------| | invoice_lines | One2many | Lineas de factura | --- ### 2.3 purchase.bill.line.match (Match de Facturas) **Archivo:** `models/purchase_bill_line_match.py` **Descripcion:** Purchase Bill Line Match #### Campos | Campo | Tipo | Req | Descripcion | |-------|------|-----|-------------| | product_id | Many2one | Si | Producto | | company_id | Many2one | Si | Empresa | | partner_id | Many2one | Si | Proveedor | | purchase_order_id | Many2one | No | Orden de compra | | aml_id | Many2one | No | Linea de factura | | line_qty | Float | No | Cantidad linea | | line_amount_untaxed | Monetary | No | Monto sin impuesto | --- ## 3. Diagrama Entidad-Relacion ``` ┌───────────────────────┐ order_line ┌───────────────────────┐ │ purchase.order │──────────────────────►│ purchase.order.line │ │ │ │ │ │ - name │ order_id │ - product_id │ │ - state │◄──────────────────────│ - product_qty │ │ - partner_id │ │ - price_unit │ │ - date_order │ │ - qty_received │ │ - amount_total │ │ - qty_invoiced │ └───────────┬───────────┘ └───────────┬───────────┘ │ │ │ partner_id │ invoice_lines ▼ ▼ ┌───────────────────────┐ ┌───────────────────────┐ │ res.partner │ │ account.move.line │ │ │ │ │ │ (Proveedor) │ │ (Linea factura) │ └───────────────────────┘ └───────────────────────┘ ┌───────────────────────┐ invoice_ids ┌───────────────────────┐ │ purchase.order │──────────────────────►│ account.move │ │ │ │ │ │ - invoice_status │ │ (Factura proveedor) │ │ - invoice_count │ │ │ └───────────────────────┘ └───────────────────────┘ ``` --- ## 4. Extensiones a Otros Modelos ### 4.1 res.partner (Proveedor) | Campo | Tipo | Descripcion | |-------|------|-------------| | property_purchase_currency_id | Many2one | Moneda compra | | purchase_warn | Selection | Tipo advertencia | | purchase_warn_msg | Text | Mensaje advertencia | | supplier_invoice_count | Integer | Facturas proveedor | | receipt_reminder_email | Boolean | Email recordatorio | | reminder_date_before_receipt | Integer | Dias antes recepcion | ### 4.2 product.template | Campo | Tipo | Descripcion | |-------|------|-------------| | purchase_ok | Boolean | Se puede comprar | | purchase_method | Selection | Metodo control | | purchase_line_warn | Selection | Advertencia | | purchase_line_warn_msg | Text | Mensaje advertencia | --- ## 5. Constraints (Restricciones) | Modelo | Campos | Validacion | Mensaje | |--------|--------|------------|---------| | purchase.order | company_id, order_line | Productos deben pertenecer a la misma empresa | Product belongs to different company | **Nota:** La mayoria de validaciones de negocio se realizan en los metodos de transicion (button_confirm, button_approve), no como constraints explicitos. --- **Referencias:** - Carpeta models: `addons/purchase/models/`