📌 Contexto
Imaginá esto: estás en la Estrella de la Muerte, a punto de probar el superláser por primera vez. El ingeniero jefe te pregunta: "ÂżDarth, quĂ© unidad de medida usamos para el rayo? Âż'Pieza', 'Unidad' o 'Equipo'?" Y vos, apurado por destruir el primer planeta, decĂs: "PonĂ© 'Unidades' nomas, total es lo mismo."
Error. Error gravĂsimo.
Seis meses despuĂ©s, cuando querĂ©s cambiar esa unidad porque resulta que un superláser no es exactamente una "unidad" genĂ©rica, descubrĂs que Odoo te dice: "No se puede cambiar la unidad de medida porque el producto ya tiene asientos contables registrados." Y tenĂ©s 10 mil facturas timbradas con el CFDI incorrecto.
Bienvenido al lado oscuro de las unidades de medida en Odoo.
En este artĂculo vamos a explorar por quĂ© definir correctamente las unidades de medida (UoM) desde el dĂa uno no es un lujo de perfeccionistas, sino una cuestiĂłn de supervivencia fiscal. Y cĂłmo un caso real con una distribuidora mĂ©dica nos enseña que mejor hacerlo bien la primera vez que tener que llamar a los Jedi de Vauxoo para que te rescaten.
ÂżPara quiĂ©n es este artĂculo? Funcional / intermedio. Consultores, implementadores, administradores de Odoo y cualquier alma que haya tenido que lidiar con un CFDI rechazado por SAT.
🎯 El DesafĂo
Historia de usuario:
Como administrador de Odoo en una empresa de distribuciĂłn, necesito que la unidad de medida de cada producto estĂ© correctamente configurada segĂşn el catálogo del SAT desde la primera vez, para no tener que rehacer productos, migrar lotes y explicarle al SAT por quĂ© mi factura dice "Unidades" cuando deberĂa decir "Equipo".
El flujo del desastre (lo que NADIE deberĂa hacer):
- Llega el momento de la implementación. Están apurados. Configuran todo con "Unidades" (SAT H87) porque "después lo ajustamos".
- Cargan 500 productos: mangueras, bombas de infusiĂłn, equipos de ultrasonido, medios de contraste. Todo con la misma UoM.
- Pasan los meses. Se emiten facturas, se timbran CFDI, se registran asientos contables, se mueve el inventario. Todo feliz.
- Un dĂa, un cliente grande les exige facturar con la unidad correcta. Resulta que los equipos mĂ©dicos deberĂan ser "Equipo" (SAT 11), no "Unidades".
- Van a cambiar la UoM en Odoo y... PUM. Mensaje de error: "No se puede cambiar la unidad de medida porque el producto ya tiene movimientos contables y de inventario."
- Pánico. Llamadas. CafĂ© frĂo. El SAT no acepta devoluciones de facturas con unidad incorrecta por una regla que cambiĂł hace tres actualizaciones.
El impacto real:
| Problema | Consecuencia |
| Facturas timbradas con UoM incorrecta | Riesgo de rechazo en contabilidad electrĂłnica o auditorĂa SAT |
| CFDI sin clave SAT correcta | El cliente no puede deducir el gasto → cliente enojado → revisión |
| Productos que no se pueden modificar | Horas de trabajo para recrear productos, migrar lotes, reconfigurar |
Soluciones que NO funcionan (o duelen):
- "Lo dejamos asĂ nomas": Funciona hasta que el SAT audita o un cliente exige la clave correcta. Entonces duele el doble.
- "Cambiamos la UoM en la DB directamente": Técnicamente posible, pero las facturas ya emitidas quedaron con la UoM vieja. Y si corrés un SQL sin pensar en los
uom_idde lĂneas de factura ystock.move, te vas a enterar por quĂ© los Sith tambiĂ©n lloran. - "Recreamos todo desde cero": SĂ, funciona, pero perdĂ©s el historial, los lotes vinculados, las relaciones con Ăłrdenes de venta cerradas, y el equipo de contabilidad te va a mirar con la misma cara que Leia cuando Han la congela en carbonita.
🔍 Análisis Técnico
La Fuerza del Catálogo SAT
El SAT mexicano (Servicio de Administración Tributaria) tiene un catálogo llamado c_ClaveUnidad (Anexo 20 del CFDI 4.0). Son ~200+ claves que definen cómo se mide lo que estás vendiendo. Y no es optativo: si timbras un CFDI, la clave de unidad es obligatoria.
Las claves que más duelen cuando no se definen bien:
| Clave SAT | Nombre | ¿Para qué? | Ejemplo |
| H87 | Pieza | ĂŤtems individuales, partes, componentes, consumibles | Manguera para paciente, sensor, filtro, medio de contraste |
| XUN | Unidad | Medida genĂ©rica (comodĂn, pero no recomendado) | Cualquier cosa que no sabĂ©s cĂłmo clasificar |
| 11 | Equipo | Unidad funcional completa, maquinaria, equipamiento | Equipo de rayos X, ultrasonido, monitor de signos vitales |
| EA | Elemento | Similar a pieza pero más especĂfico | Componente electrĂłnico individual |
| C62 | Ciento | Para lotes de 100 unidades | "100 piezas" como bloque |
La Trampa Jedi: "Total es lo mismo"
Uno de los errores más comunes que vemos es pensar que H87 (Pieza) y 11 (Equipo) son "más o menos lo mismo". No lo son.
- Vendés una manguera → H87 (Pieza). Es una pieza individual.
- Vendés un equipo de ultrasonido completo → 11 (Equipo). Es una unidad funcional que incluye múltiples componentes.
Son categorĂas SAT distintas. Si facturás un equipo mĂ©dico como "Unidades" (XUN o H87), el SAT puede:
- Rechazar la factura en revisiones de contabilidad electrĂłnica
- No permitir al cliente deducir el gasto (porque "Unidad" no es la clave correcta para equipo)
- Generar una discrepancia en tus balances cuando cruzan informaciĂłn
ÂżY la diferencia entre H87 y XUN? En la práctica, H87 (Pieza) es más especĂfico. Las empresas que usan XUN (Unidad) como comodĂn suelen tener problemas despuĂ©s porque el SAT exige especificidad. La frase "que despuĂ©s lo ajustamos" es la frase más peligrosa del universo, justo despuĂ©s de "esta Estrella de la Muerte es totalmente segura, no tiene ningĂşn punto dĂ©bil".
Cómo viene Odoo estándar
Odoo trae el catálogo SAT de unidades precargado (en el módulo l10n_mx), pero tiene varias UoM default:
| UoM Odoo | Tipo | Clave SAT (default) |
| Unit(s) | Referencia | H87 |
| Dozen(s) | Mayor | — |
| Hour(s) | Tiempo | — |
| Kilogram(s) | Peso | KGM |
| Meter(s) | Longitud | MTR |
El problema no es que Odoo no tenga el catálogo — el problema es que durante la implementaciĂłn, nadie se toma el tiempo de definir quĂ© UoM le corresponde a cada categorĂa de producto.
MĂłdulos involucrados:
| MĂłdulo | PropĂłsito |
l10n_mx | Localización mexicana: catálogos SAT, UoM precargadas |
l10n_mx_edi | CFDI 4.0: timbrado fiscal con los catálogos oficiales |
product | GestiĂłn de productos: su UoM define cĂłmo se venden y facturan |
account | Contabilidad: los asientos contables se graban con la UoM del producto en ese momento |
ConfiguraciĂłn crĂtica (y la que NADIE revisa):
- uom_id en
product.template: la UoM de venta. Esta es la que se usa en facturas (y por ende en CFDI). - uom_po_id: la UoM de compra. Puede ser diferente (ej: comprás por caja, vendés por pieza). En ese caso, el tipo de UoM debe tener factor de conversión.
- CategorĂa de UoM: agrupa UoMs que se pueden convertir entre sĂ. No podĂ©s tener "Pieza" y "Kilogramo" en la misma categorĂa (son magnitudes diferentes).
đź’ˇ La SoluciĂłn
La Regla de Oro (que todos ignoran hasta que arde)
Definà las UoM por CATEGORÍA de producto, no por producto individual, y hacelo en la implementación, no después.
Esto parece obvio, pero en la práctica el 90% de las implementaciones que vemos con problemas de UoM tienen la misma historia: "Lo configuramos todo con Unidades porque estábamos apurados, y ahora no podemos cambiar."
Paso a paso desde la UI (lo que deberĂas hacer el dĂa 1):
Fase 1 — Planificación (antes de cargar un solo producto):
- Ir a Contabilidad → Configuración → Localización → Unidades de Medida SAT
- Revisar el catálogo completo de claves SAT disponibles
- Hacer una tabla con los tipos de productos que comercializa la empresa:
TIPO DE PRODUCTO → CLAVE SAT → UoM Odoo
────────────────────────────────────────────
Consumibles → H87 (Pieza) → Pieza
Equipos → 11 (Equipo) → Equipo (crear si no existe)
Servicios → H87 (Pieza) → Service Unit (o crear)
Insumos x kg → KGM (Kilogramo) → Kilogramo
Insumos x litro → LTR (Litro) → Litro
Fase 2 — Configuración técnica:
- Verificar que las UoM necesarias existan en Odoo. Si no existe "Equipo" con SAT 11:
- Ir a Inventario → Configuración → Unidades de Medida
- Crear nueva UoM con nombre "Equipo", factor 1.0
- En el campo fiscal (l10n_mx), asignar clave SAT 11
- Asignarla a la categorĂa correspondiente (o crear una nueva categorĂa "Equipos")
- Crear las categorĂas de producto alineadas a los tipos definidos:
CATEGORÍA DE PRODUCTO → UoM Default
──────────────────────────────────────
Consumibles Médicos → Pieza (H87)
Equipos Médicos → Equipo (11)
Servicios de Instalación → Unidad de Servicio
- En cada categorĂa, setear la UoM por defecto. AsĂ los productos nuevos heredan la UoM correcta automáticamente.
Fase 3 — Carga de productos:
- Al crear cada producto, la UoM viene precargada de la categorĂa
- Verificar que la UoM sea la correcta antes de guardar (especialmente para productos que se salen de la norma)
- No escatimar en este paso. Cada producto mal clasificado es una bomba de tiempo fiscal.
VerificaciĂłn funcional:
- [ ] ÂżCada categorĂa de producto tiene su UoM default correcta?
- [ ] ÂżCada UoM tiene su clave SAT asignada?
- [ ] ÂżHay productos con UoM "XUN" (Unidad genĂ©rica) que deberĂan tener una clave más especĂfica?
- [ ] ÂżLas UoM de compra y venta coinciden? Si no, Âżhay factor de conversiĂłn configurado?
ÂżY si ya estamos en el pantano? (cuando ya es tarde pero hay que arreglarlo)
Si llegaste a este artĂculo porque ya tenĂ©s el problema, no todo está perdido. Acá van las alternativas ordenadas de mejor a peor:
| Alternativa | Cuándo usarla | Riesgo |
| 1. Cambiar UoM forzado vĂa tĂ©cnico | Productos sin movimientos contables recientes, o con cero existencias | Bajo si se hace con cuidado y se actualizan las lĂneas existentes |
| 2. Crear UoM con conversiĂłn | Productos donde la nueva unidad es convertible desde la anterior (ej: "Pieza" ↔ "Unidad" están en la misma categorĂa) | Medio — requiere recalcular existencias |
| 3. Productos nuevos + desactivar originales | Productos con historial contable, lotes, series, caducidades | Bajo (es la más segura) pero más trabajo |
| 4. SQL directo a la DB | Solo como última opción y conociendo todas las tablas que tocar | ⚠️ Alto — puede romper facturas, movimientos, reconciliaciones |
La opciĂłn Jedi (recomendada para casos con historial):
- Identificar productos problemáticos (los que tienen UoM incorrecta)
- Agruparlos: sin movimientos, con movimientos pero sin existencias, con existencias
- Sin movimientos → cambio directo vĂa UI o script
- Con movimientos pero sin existencias → crear duplicado con UoM correcta, desactivar original
- Con existencias y lotes → lo más complejo: ajuste de inventario + migración de lotes al nuevo producto
- Validar con un CFDI de prueba antes de hacer el cambio masivo
âś… Resultados y Beneficios
Lo que pasa cuando lo hacés bien desde el principio
Mejoras funcionales:
- No hay más facturas rechazadas por unidad de medida incorrecta
- El catálogo de productos está alineado con las exigencias fiscales del SAT
- Los clientes pueden deducir correctamente sus compras
- Contabilidad duerme tranquila (y eso no tiene precio)
Impacto medible (de casos reales que hemos visto):
| Métrica | Antes de definir UoM correctas | Después |
| Facturas timbradas con error de unidad | 3-5% | 0% |
| Tiempo de revisión de CFDI en contabilidad | 2h por semana | 0 (automático) |
| Clientes reportando problemas fiscales | 1-2 por mes | 0 |
| Trabajo de migraciĂłn cuando se necesita cambiar UoM | 40-80h por proyecto | 0 (no hace falta) |
Beneficios por rol:
| Rol | Qué gana |
| Administración / Implementador | Configuras una vez, olvidás para siempre. No hay llamadas de pánico 6 meses después. |
| Contabilidad | CFDI siempre correctos. AuditorĂa SAT sin sobresaltos. Nadie te pregunta "Âżpor quĂ© esta factura tiene 'Unidad' si es un equipo?" |
| Ventas | Facturás con la unidad correcta desde el dĂa 1. Los clientes no te devuelven facturas por errores de clave SAT. |
| Desarrolladores / Consultores | No tenés que hacer migraciones de emergencia ni correr scripts a las 2 AM un sábado. |
| El SAT | No tiene opiniĂłn. Pero si pudiera, te agradecerĂa. |
Lecciones aprendidas:
- La UoM no es un detalle cosmético. Es un dato fiscal. Tratarlo como "lo ponemos después" es como construir la Estrella de la Muerte y decir "el reactor lo conectamos después".
- Las categorĂas de producto son tu mejor aliado. Configurando la UoM por categorĂa, los productos nuevos heredan la unidad correcta automáticamente. Es el equivalente a poner un droide de protocolo que se encargue de la documentaciĂłn mientras vos hacĂ©s cosas importantes.
- El SAT no perdona. Con la contabilidad electrĂłnica 4.0, el SAT cruza datos automáticamente. Una clave de unidad incorrecta puede generar una discrepancia que te cueste horas de aclaraciĂłn. Horas que podrĂas haber usado para, no sĂ©, mirar una serie.
- "Después lo ajustamos" es la frase más cara del ERP. Siempre. En todos los casos. Sin excepción.
📚 Para Profundizar
- Catálogo oficial SAT c_ClaveUnidad: SAT - Catálogos CFDI 4.0 — La fuente de verdad de todas las claves de unidad
- DocumentaciĂłn Odoo - LocalizaciĂłn Mexicana:
l10n_mxyl10n_mx_edi— Cómo Odoo maneja los catálogos SAT y el timbrado CFDI - Anexo 20 CFDI 4.0: SAT - Anexo 20 — El documento completo con todas las reglas de facturación electrónica
- Odoo Forum - Unidades de Medida: Una búsqueda rápida te muestra que no sos el único. Cientos de consultas sobre "how to change uom on products with accounting entries"
đź’¬ ÂżTu experiencia es diferente?
¿Te pasó que tuviste que migrar productos por una UoM mal definida? ¿Encontraste un atajo que no mencionamos? ¿O simplemente querés compartir tu historia de terror con las unidades del SAT? Te leemos. Porque si algo tiene la comunidad Odoo, es que siempre hay alguien que ya pasó por lo mismo y tiene una historia peor.
Que la Fuerza (y las claves SAT) te acompañen. 🚀