Skip to Content

🎁 Cómo diferenciar productos de cortesía para gestión de garantía en Odoo — el problema de los regalos que no deberían volver

📌 Contexto
June 28, 2026 by
BloVox

📌 Contexto

—Señor, los rebeldes recibieron el envío de suministros. Todo en orden.

—¿Todo? ¿Hasta los regalos que les mandamos como cortesía?

—Bueno... ahí está el problema. Están reclamando la garantía de los lanzacohetes que les regalamos.

—Pero... ¡si fueron un regalo! No pueden reclamar garantía por algo que no pagaron.

—Eso digo yo, señor. Pero el sistema no distingue entre lo que vendimos y lo que regalamos.

Bienvenidos al Trench Run de la gestión de garantías en Odoo. El Imperio tenía sus Death Stars, pero nosotros tenemos un problema mucho más común: ¿cómo gestionás productos de cortesía (regalos comerciales, muestras gratis, promociones) en Odoo cuando no deberían aplicar para garantías, reemplazos, reparaciones ni notas de crédito?

Es un clásico. Tu empresa vende productos. A veces regalás muestras, cortesías comerciales o productos promocionales. Pero en Odoo, un producto es un producto. No hay un switch mágico que diga "esto es un regalo, no le des garantía". Y cuando el cliente llama porque el producto de cortesía se rompió, tu equipo de post-venta no sabe si aplica garantía o no.

¿Para quién es este artículo? Nivel intermedio. Asume que conocés Odoo (productos, ventas, reparaciones, garantías) pero no necesitás saber programación. Esto es puro Odoo estándar, sin tocarlo.


🎯 El Desafío

Historia de usuario:

Como encargada de post-venta en una empresa que vende equipamiento (desde electrónica hasta maquinaria), necesito que el sistema distinga automáticamente los productos entregados como cortesía de los productos vendidos regulares, para no procesar reclamos de garantía, reparaciones o notas de crédito sobre productos que fueron regalos comerciales.

Flujo actual (antes de la solución):

  1. El equipo comercial entrega un producto como cortesía (regalo promocional, muestra, compensación)
  2. En Odoo se registra como una venta normal con precio 0 o como una nota de crédito
  3. El producto queda en el sistema con el mismo tratamiento que cualquier otro producto
  4. El cliente reclama que el producto falla
  5. Tu equipo de post-venta no sabe si aplica garantía o no
  6. Terminan procesando la reparación "por las dudas" — y perdés tiempo, piezas y dinero

El problema real es más complejo de lo que parece porque tenés TRES tipos de productos conviviendo:

TipoDescripción¿Aplica garantía?¿Aplica reparación?¿Aplica NC?
Venta regularProducto vendido con precio normal✅ Sí✅ Sí✅ Sí
Remate / LiquidaciónProducto vendido con descuento, "tal cual"⚠️ Limitado⚠️ Limitado❌ No
CortesíaRegalo comercial, precio 0❌ No❌ No❌ No

Soluciones que NO funcionan (o funcionan a medias):

  • Poner precio 0 al producto y ya está: No es suficiente. El sistema no sabe si precio 0 es un descuento, un remate o una cortesía.
  • Crear notas internas en la orden: No escala. ¿Quién va a leer las notas de cada orden antes de procesar una garantía 6 meses después?
  • Usar un campo custom de desarrollo: Es la solución definitiva... pero este artículo es sobre ODOO ESTÁNDAR. Sin código, sin módulos que mantener.

🔍 Análisis Técnico

Cómo viene en Odoo estándar

Odoo no tiene un flag de "cortesía" ni nada remotamente parecido. El concepto de producto es unitario: una hoja de producto (product.template) con ciertos atributos. No hay un checkbox de "Esto es un regalo, no le des servicio".

Sin embargo, Odoo tiene múltiples mecanismos estándar que combinados resuelven este problema sin tocar una línea de código. La clave está en entender qué herramientas tenés y cómo encadenarlas.

Módulos involucrados

MóduloPropósito en esta historia
Ventas (sale_management)Donde se crean las órdenes y se clasifican los productos
Inventario (stock)Define categorías de productos y comportamiento de stock
Reparaciones (repair)El módulo de post-venta que necesitamos controlar
Contabilidad (account)Notas de crédito y facturación
Acciones Automatizadas (base)La navaja suiza de Odoo para validaciones sin código

Arquitectura conceptual

product.template
├── product.category ← FUNDAMENTAL: acá ponemos la categoría "Cortesía"
├── product.tag      ← OPCIÓN: etiqueta liviana para filtros
├── type             ← storable / consumible / service
└── list_price       ← Precio de lista (0 para cortesía)

repair.order
├── product_id.categ_id ← DONDE VALIDAMOS: si es Cortesía → bloqueamos

account.move (factura/NC)
└── line_ids.product_id.categ_id ← DONDE VALIDAMOS: cortesía no admite NC

stock.lot (lote/serie)
└── warranty_expiration_date ← Se puede controlar por categoría

💡 La Solución

Qué logra (en términos de negocio):

Cuando el equipo de post-venta intente crear una reparación o nota de crédito para un producto de cortesía, el sistema mostrará un error y no dejará avanzar. Simple, efectivo, sin código.

Las herramientas que vas a usar

Odoo te da 4 mecanismos estándar. Usalos en este orden:


🛠 Mecanismo 1: Categoría de producto específica

Esta es la piedra fundamental. Creá una categoría de producto Cortesía / Regalo Comercial (o como quieras llamarla). Todos los productos que sean regalos comerciales se asignan a esta categoría.

Paso a paso:

  1. Ir a Ventas → Productos → Categorías de producto
  2. Crear nueva categoría con nombre "Cortesía" y padre "Todos los productos" (o la que corresponda)
  3. Configurarla como tipo Consumible (así no genera movimientos de inventario que compliquen)
  4. Cuando crees un producto de cortesía, asignale esta categoría

¿Qué ganás con esto?

  • Los productos de cortesía se separan automáticamente en reportes
  • Podés filtrarlos en cualquier lado del sistema
  • No afectan cálculos de margen
  • Podés excluirlos de valuación de inventario
  • Y lo más importante: PODÉS VALIDAR CONTRA ELLA EN ACCIONES AUTOMATIZADAS

🛠 Mecanismo 2: Tags de producto (product.tag)

La categoría es el approach fuerte. Los tags son el approach liviano. Creá un tag "Cortesía" y asignalo a los productos correspondientes.

Paso a paso:

  1. Ir a Ventas → Productos → Tags de producto (si no ves la opción, activala en Ajustes)
  2. Crear tag "Cortesía" con un color distintivo (ej: naranja)
  3. Asignarlo a los productos relevantes

¿Cuándo usar tags en vez de categoría?

  • Cuando tenés productos que ya están en categorías existentes y no querés re-clasificarlos
  • Cuando necesitás una solución más liviana que no afecte la estructura contable
  • Como complemento de la categoría para filtros más específicos

Dato curioso: Podés usar ambes. Categoría para la validación fuerte (bloquear reparaciones) y tags para reportes y filtros visuales. Como un sable de luz con dos modos.


🛠 Mecanismo 3: Flag "Gratuito" en localizaciones LATAM

Si usás localización LATAM (Argentina, México, Colombia, etc.), las líneas de factura tienen un flag de producto gratuito que afecta el tratamiento fiscal (ARBA, SAT, DIAN). No es exactamente el concepto de cortesía comercial, pero está cerca.

Paso a paso:

  1. En la factura, al agregar una línea de producto, buscá el campo "Tipo" o "Producto gratuito" en la línea
  2. Marcá la opción correspondiente
  3. La factura se emite con el tratamiento fiscal correcto

Limitación: Este flag es fiscal, no operativo. No bloquea reparaciones ni garantías por sí mismo. Pero en combinación con la categoría de producto, te da la parte fiscal y la parte operativa cubiertas. Como tener un escudo deflector y un reactor de hiperimpulsión.


🛠 Mecanismo 4: Acciones Automatizadas (la pieza clave)

Este es el mecanismo que CIERRA EL CIRCUITO. Con Acciones Automatizadas (o Server Actions) podés validar que no se creen reparaciones, garantías o notas de crédito sobre productos de cortesía.

Paso a paso para bloquear reparaciones de cortesía:

  1. Ir a Ajustes → Técnico → Acciones → Acciones Automatizadas
  2. Crear nueva acción:
  • Nombre: "Validar cortesía en reparaciones"
  • Modelo: repair.order
  • Trigger: on_create o on_write (según cuándo quieras validar)
  • Antes de actualizar: ✅ Sí (esto permite mostrar error ANTES de guardar)
  1. Código de acción Python (sin miedo, es una línea):
if records.product_id.categ_id.name == 'Cortesía':
    raise UserError('Los productos de cortesía no aplican para reparaciones. Contactá a tu superior.')
  1. Guardar y activar.

Paso a paso para bloquear notas de crédito de cortesía:

Similar, pero sobre el modelo account.move:

  1. Crear nueva Acción Automatizada:
  • Nombre: "Validar cortesía en notas de crédito"
  • Modelo: account.move
  • Trigger: on_create
  • Antes de actualizar: ✅ Sí
  1. Código:
for line in records.invoice_line_ids:
    if line.product_id.categ_id.name == 'Cortesía':
        raise UserError('Los productos de cortesía no admiten notas de crédito.')

⚠️ Importante: Las Acciones Automatizadas requieren permisos de desarrollador (Modo Técnico activado). Si no ves "Ajustes → Técnico", activá el modo desarrollador en Ajustes Generales.


🛠 Mecanismo 5 (Bonus): Producto tipo Servicio

Para productos de cortesía que no rotan en inventario (ej: un vale de descuento, una membresía cortesía, un servicio promocional), definilos como tipo Servicio con precio 0.

Ventajas:

  • No generan movimientos de stock
  • No aplican para garantías de producto físico (no hay tracking por lote/serie)
  • Se facturan sin impacto en inventario
  • Perfecto para regalos intangibles

Desventaja: No sirve para productos físicos que sí salen del depósito pero son cortesía. Ahí necesitás la categoría + acciones automatizadas.


La combinación ganadora (el "Death Star Trench Run" approach)

┌─────────────────────────────────────────────────────────────┐
│                   ESTRATEGIA COMPLETA                        │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. CATEGORÍA "Cortesía"  ← Base de todo                   │
│     ↓                                                       │
│  2. TAG "Cortesía"       ← Para filtros visuales           │
│     ↓                                                       │
│  3. PRODUCTOS             ← Asignados a la categoría       │
│     ↓                                                       │
│  4. ACCIÓN AUTOMATIZADA   ← Bloquea reparaciones           │
│     ↓                                                       │
│  5. ACCIÓN AUTOMATIZADA   ← Bloquea notas de crédito       │
│     ↓                                                       │
│  6. ✅ Sistema blindado. Cortesía ≠ Garantía.              │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Configuración y Pruebas

Prerrequisitos:

  • Modo Técnico activado (Ajustes → Ajustes Generales → Activar Modo Técnico)
  • Acceso a Acciones Automatizadas
  • Módulos: Ventas, Inventario, Reparaciones instalados

Scenario de prueba:

  1. Crear un producto "Lanzacohetes MX-3000" con categoría "Cortesía" y precio 0
  2. Crear una orden de venta para el cliente "Alianza Rebelde Consulting" con este producto
  3. Confirmar la orden y entregar (si es tipo Consumible, entrega normal)
  4. Ir a Reparaciones → Crear reparación
  5. Seleccionar el producto "Lanzacohetes MX-3000"
  6. Resultado esperado: Error de sistema que dice "Los productos de cortesía no aplican para reparaciones"
  7. Intentar crear una nota de crédito con ese producto
  8. Resultado esperado: Mismo bloqueo

Verificación funcional:

  • [ ] Producto de cortesía NO permite crear reparación → Error mostrado
  • [ ] Producto de cortesía NO permite nota de crédito → Error mostrado
  • [ ] Producto regular SÍ permite reparación → Todo normal
  • [ ] Producto de remate SÍ permite reparación → (a menos que tengas otra regla)
  • [ ] Reporte de productos vendidos vs cortesía → Se ven separados por categoría

✅ Resultados y Beneficios

Mejoras funcionales:

  • El equipo de post-venta ya no pierde tiempo decidiendo si un producto aplica o no
  • Los productos de cortesía no generan costos ocultos de reparación
  • Los clientes reciben la respuesta correcta desde el primer contacto
  • Reportes de ventas vs cortesía limpios, separados por categoría

Stack completo de mecanismos estándar usados:

Ninguno de estos mecanismos requiere desarrollo:

  • ✅ Categorías de producto (UI nativa)
  • ✅ Tags de producto (UI nativa)
  • ✅ Flag gratuito LATAM (UI nativa)
  • ✅ Acciones automatizadas (UI técnica, sin código que mantener)
  • ✅ Tipo Servicio (UI nativa)

Impacto medible:

  • 0 horas de desarrollo vs estimación de 8-12h para desarrollo custom
  • 100% de los casos de cortesía bloqueados si configuraste bien las acciones
  • Sin deuda técnica — todo es configuración estándar que sobrevive upgrades

Beneficios por rol:

RolQué gana
Post-VentaReglas claras: cortesía = no reparación. Sin ambigüedad.
ComercialPuede dar cortesías sin miedo a que generen costos de post-venta.
LogísticaLos productos de cortesía se manejan distinto en inventario (consumible = sin tracking).
AdministraciónReportes separados por categoría. Cortesía no distorsiona márgenes.
GerenciaPolítica de cortesía enforceable sin depender de la buena voluntad de nadie.

Lecciones aprendidas:

  • La categoría de producto es infravalorada. La mayoría piensa en ella solo para contabilidad, pero es la base para TODO tipo de segmentación operativa.
  • Las Acciones Automatizadas son el equivalente Odoo del "soporte vital" de Darth Vader — hacé que funcionen para vos y te salvan de muchos problemas.
  • No necesitás un módulo custom para esto. El 90% de los problemas de segmentación de productos en Odoo se resuelven con categorías + tags + automatizaciones. El otro 10%... bueno, para eso están los módulos OCA.

Extensiones futuras:

  • Si querés más control, el repositorio OCA/rma tiene módulos interesantes:
  • product_warranty: Agrega campos de garantía en producto y proveedor
  • rma: El módulo base de Return Merchandise Authorization (gestión de devoluciones)
  • rma_reason: Motivos de RMA (ideal para clasificar por qué se devuelve)
  • rma_repair: Conecta RMA con reparaciones
  • rma_sale: Asocia RMA con órdenes de venta originales
  • rma_delivery: Manejo de transportistas en devoluciones
  • rma_lot: Gestión por lotes/series en devoluciones

Estos módulos son Open Source (AGPL-3) y te dan una capa profesional de gestión de devoluciones si el volumen lo justifica.


📚 Para Profundizar


💬 ¿Tu experiencia es diferente?

¿Manejás productos de cortesía de otra forma en tu Odoo? ¿Usaste el flag gratuito de localización LATAM y te funcionó? ¿O terminaste armando un módulo custom? La comunidad Odoo es enorme y siempre hay múltiples approaches para el mismo problema. Contá cómo lo resolviste — tu solución puede ser el approach que otro no había considerado.

📬 ¿No querés perderte ningún artículo nuevo?

Dejanos tu correo y te avisamos cuando publiquemos algo.

¡Gracias por suscribirte!