---
audiencia: usuario
screen_key: motor-precios-rentabilidad
titulo: Motor de Precios, Rentabilidad y Descuentos con Tope
aliases:
  - reglas de precio
  - motor de precios
  - marcacion automatica de precios
  - margen sobre costo
  - markup
  - precio sugerido
  - recalcular lista de precios
  - previsualizar impacto de una regla
  - precio por regla
  - override de precio
  - rentabilidad neta
  - utilidad neta
  - margen neto
  - costos de operacion a credito
  - comision de venta
  - costo de cobranza
  - costo financiero
  - mora esperada
  - descuento con tope
  - tope de descuento
  - punto de equilibrio
  - descuento maximo
  - autorizacion de descuento
  - autorizacion de supervisor
  - pin de supervisor
  - panel supervisor
  - autorizacion remota
  - pedir autorizacion remota
  - alcance por categoria
  - regla de precio por categoria
  - plan de cuotas por categoria
  - categoria especifica
  - categoria padre
  - regla de precio global
---

# Motor de Precios, Rentabilidad y Descuentos con Tope

Cubre cuatro funcionalidades nuevas, construidas sobre el módulo de **Listas de Precios**
(`guia-listas-de-precios.md`), que resuelven "cuánto cobro", "cuánto gano realmente", "hasta
cuánto puedo descontar sin pedir permiso" y "esta regla o este plan aplica solo a un rubro":

1. **Reglas de precio** — el precio de venta contado se calcula solo a partir del costo del
   producto, sin cargar cada precio a mano.
2. **Rentabilidad neta** — el reporte de rentabilidad ya no solo muestra utilidad bruta: también
   descuenta lo que cuesta vender a crédito (comisión, cobranza, financiero, mora).
3. **Descuentos con tope y autorización** — el POS calcula solo, por producto, hasta cuánto se
   puede descontar sin vender por debajo del costo, y si un vendedor necesita pasarse de ese
   límite, pide autorización a un supervisor (presencial con PIN o remota, sin que el supervisor
   esté en el local).
4. **Alcance por categoría** — tanto una regla de precio como un plan de cuotas se pueden acotar,
   de forma opcional, a una categoría de producto (específica o su categoría padre), para
   comercios con rubros mixtos donde una marcación o un plan de financiación no debe aplicar a
   todo el catálogo por igual.

Las cuatro comparten una misma idea de fondo: **el precio y el margen se calculan desde el costo
real del producto**, no se cargan ni se controlan a mano.

## Dónde está esto en el menú

| Funcionalidad | Ruta |
|---|---|
| Reglas de precio (crear/editar/recalcular) | **Inventario** → pestaña **"Listas Precios"** → sub-pestaña **"Reglas de precio"** (`/inventario?tab=listas-precios&vista=reglas`) |
| Tope manual de descuento por producto | **Inventario** → pestaña **"Productos"** → editar un producto → pestaña **"Precios"** (mismo lugar donde se lo agrega a una lista de precios) |
| Rentabilidad neta (reporte + configuración de costos) | **Reportes** → **"Rentabilidad"** (`/reportes/rentabilidad`) → botón **"Costos de crédito"** |
| Autorizar un descuento (PIN presencial) | Aparece solo, como diálogo, en el momento de facturar en el **POS** si el descuento supera el tope |
| Autorizar un descuento (remoto) | **Cobranzas** → **"Autorizaciones"** en el sidebar → aterriza en la pestaña **"Descuentos"** de Panel Supervisor: hay que hacer clic en la pestaña **"Pendientes"** para ver las solicitudes de descuento del POS (no confundir con la pestaña "Descuentos", que es para exoneraciones de mora de Cobranzas — ver `guia-cobranzas.md`) |
| Alcance por categoría (reglas de precio) | Mismo formulario de **"Nueva regla"**/edición de reglas de precio (arriba) — campo **"Categoría"** debajo de la lista de precios destino |
| Alcance por categoría (planes de cuotas) | **Configuración → Facturación → "Planes de Cuotas Automáticos"** → crear/editar un plan → sección **"Límites (opcional)"** |

Permisos nuevos/relevantes: `INV_RGP_REGLA_VER/CREAR/EDITAR/ELIMINAR` (reglas de precio, módulo
INVENTARIO), `INV_RGP_PRECIO_EDITAR` (editar a mano un precio generado por una regla), `VEN_LISTA_VER/EDITAR`
(pestaña Precios del producto, módulo VENTAS), `REP_ROC_CONFIG_VER/EDITAR` (configurar costos de
operación a crédito, módulo REPORTES), `POS_SUPERVISOR` (autorizar con PIN), `COB_AUT_AUTORIZACION_VER`
(ver Panel Supervisor), `VEN_PCA_PLAN_VER/CREAR/EDITAR` (planes de cuotas, módulo VENTAS).
Elegir una categoría en cualquiera de los dos formularios de arriba requiere además, del lado del
usuario, el permiso `INV_CAT_CATEGORIA_VER` (módulo INVENTARIO) para que el selector pueda listar
las categorías — sin él, el selector queda vacío en vez de fallar (ver §4 abajo).

---

## 1. Reglas de precio

### Qué resuelve

Antes había que cargar el precio de cada producto a mano en la lista de precios. Con una regla,
el sistema **sugiere el precio contado a partir del costo** (`productos.precio_costo`) y lo puede
escribir directo en la lista de precios elegida, para cualquier producto que caiga en el rango de
costo de la regla.

### Crear una regla

`Productos → Listas Precios → Reglas de precio → Nueva regla`. Campos:

| Campo | Detalle |
|---|---|
| Nombre | Identificador para el usuario (ej. "Electrodomésticos chicos") |
| Lista de precios destino | A qué lista escribe el precio calculado |
| Costo desde / Costo hasta | Rango de costo al que aplica. "Sin tope superior" deja el rango abierto |
| Método de cálculo | `Margen sobre costo` / `Markup sobre precio de venta` / `Precio fijo` (ver fórmulas abajo) |
| Valor | % (o monto si es Precio fijo) — el campo cambia de etiqueta según el método elegido |
| Redondear | Switch. Si está ON: tipo de redondeo (superior/normal/inferior) y a qué múltiplo redondear (ej. a 1.000 Gs) |
| Prioridad | Si dos reglas compiten por el mismo producto, gana la de mayor prioridad |

**Fórmulas** (el `valor` que carga el usuario es siempre un número, ej. `15` = 15%):

```
margen_sobre_costo:   precio = costo × (1 + valor/100)
markup_sobre_precio:  precio = costo / (1 − valor/100)
precio_fijo:          precio = valor
```

`margen_sobre_costo` y `markup_sobre_precio` **no dan el mismo resultado** para el mismo `valor`
— el segundo garantiza que `valor`% del precio final sea margen, el primero no. Elegir según cómo
el negocio piensa su margen.

### Previsualizar antes de aplicar

Botón **"Previsualizar impacto"** en cada regla: abre un diálogo de solo lectura con la cantidad
de productos afectados y una tabla de ejemplo (Producto / Costo / Precio actual / Sugerido, hasta
25 filas). No cambia ningún precio — es para revisar antes de tocar nada. Nota en pantalla: *"Esto
es solo lectura — no modifica ningún precio. Para aplicar, usá 'Recalcular lista'."*

### Aplicar — Recalcular lista

Botón **"Recalcular lista"**. Opciones:

- **Lista de precios** destino.
- Alcance: **"Todo el catálogo con costo cargado"** o **"Solo productos puntuales"** (elegidos a
  mano).
- **"Preservar precios editados manualmente"** (ON por default) — si un precio fue tocado a mano
  después de haber salido de una regla, el recálculo **no lo pisa**, salvo que se apague este
  switch a propósito.
- **"Regenerar grilla de cuotas de cada producto"** (ON por default) — recalcula también las
  cuotas asociadas a cada producto.

Si el alcance es "todo el catálogo", pide una segunda confirmación ("Recalcular TODO el
catálogo") antes de ejecutar. Al terminar muestra: evaluados, actualizados, omitidos por override
manual, sin regla aplicable a su costo, y grillas de cuotas generadas.

### Cómo se ve en el producto

En la pestaña **"Precios"** del producto, un precio que vino de una regla muestra un chip
**"Por regla"** (con tooltip del nombre de la regla). Ese precio queda **bloqueado para edición
manual** (ícono de candado) salvo que el usuario tenga el permiso `INV_RGP_PRECIO_EDITAR` — sin
él, el tooltip dice *"Este precio lo generó una regla automática. Necesitás el permiso de
override para editarlo a mano."*

---

## 2. Rentabilidad neta

> **Alcance por sucursal**: las cuatro vistas del reporte (Por Producto, Por Cliente, Por Sucursal y el resumen) se recortan a las sucursales asignadas al usuario. Uno sin asignaciones ve toda la empresa. Dos usuarios distintos pueden ver cifras distintas del mismo período sin que ninguna esté mal — cada uno mide sobre sus sucursales. Ver `guia-alcance-por-sucursal.md`.

### Qué resuelve

El reporte de rentabilidad (`Reportes → Rentabilidad`) ya calculaba utilidad **bruta** usando el
costo real del lote (FIFO) consumido en cada venta. Lo nuevo es un overlay que descuenta, además,
lo que **realmente cuesta vender a crédito** — para no confundir "vendí con buen margen" con
"gané plata después de pagar comisión, cobranza, financiamiento y mora".

### Configurar los costos de operación a crédito

Botón **"Costos de crédito"** en el reporte (permiso `REP_ROC_CONFIG_VER`/`EDITAR`). Abre
**"Costos de operación a crédito"**:

| Campo | Aplica a | Qué representa |
|---|---|---|
| Activo (switch) | — | Si está apagado, el reporte solo muestra bruto (comportamiento de siempre) |
| Comisión de venta % | Toda venta | Se usa solo si no hay comisión real cargada ni % propio del vendedor — es el último fallback |
| Costo de cobranza % | Solo ventas a crédito | % sobre el ingreso de la factura |
| Costo financiero mensual % | Solo ventas a crédito | Tasa mensual sobre el **costo de mercadería financiado**, multiplicada por los meses de plazo |
| Mora esperada % | Solo ventas a crédito | Provisión estadística sobre el ingreso, no una mora real ya ocurrida |

### Cómo se decide si una factura es "a crédito"

No se mira `icondcred`/`dcuotas` de la factura (son datos declarativos para SIFEN). Una factura
cuenta como a crédito si tiene **al menos una fila en el cronograma de cuotas** (`factura_cuotas`)
— la tabla real de cobro, se genere como se genere la financiación.

### Dónde se ve

Debajo de los KPIs de siempre (ingreso, utilidad bruta, margen bruto), aparecen — solo si hay
algún costo de crédito activo y aplicado — **Utilidad Neta**, **Margen Neto**, y una tarjeta con
el desglose (comisión / cobranza / financiero / mora) al pasar el mouse. En las tablas ("Por
Producto", "Por Cliente", "Por Sucursal") se agregan columnas **"Ut. Neta"** y **"Mg. Neto"** al
final, sin tocar las columnas de bruto que ya existían. El export a Excel también las incluye.

---

## 3. Descuentos con tope y autorización

### Qué resuelve

Antes el descuento en el POS era libre, de 0 a 100%, sin ningún control — un vendedor podía
(sin querer o no) vender por debajo del costo. Ahora el sistema calcula, **por producto**, el
descuento máximo que todavía deja ganancia, y bloquea cualquier exceso hasta que un supervisor lo
autorice.

### Cómo se calcula el tope — no es un número cargado a mano

```
piso = precio_mínimo del producto en esa lista, si está cargado y es > 0
       si no, precio_costo del producto

tope % = (1 − piso / precio_de_venta) × 100
```

Es el **punto de equilibrio exacto**: el % de descuento que deja el precio final justo en el
piso. No es "el % de la regla de precio tal cual" — por ejemplo, un producto con costo 510.000 y
precio de venta 625.000 (una regla le cargó +25% de margen) tiene un tope real de **18,4%**, no
25% — un descuento del 25% dejaría el precio en 468.750, por debajo del costo.

**Campo de respaldo manual**: si el producto no tiene ni costo ni precio mínimo cargados, se usa
`descuento_maximo_pct` (pestaña "Precios" del producto, campo **"Tope descuento manual %"**). Si
tampoco está cargado, el tope es **0%** — cualquier descuento pide autorización. Es el
comportamiento seguro por defecto: sin datos de costo, mejor pedir permiso siempre.

### Cómo se ve en el POS

Al cargar un descuento por producto, el campo de **%** se clampea automáticamente al tope real —
no deja escribir más que eso — y muestra un aviso al lado del campo: **"(máx. 18,4% sin
autorización)"**. Esto pasa tanto buscando el producto por texto como agregándolo desde
"Explorar todos los productos".

El **descuento global** de la factura (el que se aplica a todo el carrito, no a un producto
puntual) no tiene tope propio: se reparte entre los productos según su peso en el subtotal, y esa
parte prorrateada se suma al descuento propio de cada producto para chequear contra su tope — por
eso un descuento global "razonable" puede terminar disparando el aviso de autorización en un
producto puntual con margen más ajustado.

### Si se supera el tope

Al confirmar la venta aparece el diálogo **"Autorización de supervisor requerida"**, con el
detalle de qué producto(s) superan su tope y por cuánto. Dos caminos, elegibles ahí mismo:

1. **"Ingresar PIN de supervisor"** — un supervisor físicamente presente escribe su usuario y
   PIN. Requiere el permiso `POS_SUPERVISOR` (los superadministradores lo saltean). La venta se
   completa al toque.
2. **"Pedir autorización remota"** — no hace falta que el supervisor esté en el local. El pedido
   aparece en tiempo real en **Panel Supervisor** (ver abajo) de cualquier supervisor conectado;
   apenas alguien lo aprueba con su propio PIN, la venta en el POS se destraba sola — el vendedor
   no tiene que hacer nada más ni refrescar la pantalla.

Cada autorización se usa **una sola vez**: al crear la factura, el sistema la marca como
consumida, así no sirve para una segunda venta.

`precio_mínimo` no es un piso absoluto — se puede pisar con cualquiera de los dos caminos de
autorización, igual que cualquier otro exceso de tope.

### Aprobar desde Panel Supervisor (remoto)

**Cobranzas → "Autorizaciones"** en el sidebar. Ojo: este link entra directo a la pestaña
**"Descuentos"** de Panel Supervisor (que es para exoneraciones de mora de Cobranzas, un tema
distinto) — para ver los pedidos de descuento del POS hay que hacer clic en la pestaña
**"Pendientes"**. Ahí aparece cada solicitud con el detalle del producto y el % pedido; el botón
**"Aprobar"** solo pide el PIN propio del supervisor logueado (no pide usuario, ya sabe quién sos
por la sesión). El indicador **"Conectado"** arriba a la derecha confirma que el panel está
recibiendo las solicitudes en tiempo real por WebSocket, no por refresco manual.

---

## 4. Alcance por categoría (reglas de precio y planes de cuotas)

### Qué resuelve

Antes, una regla de precio o un plan de cuotas aplicaba a **todo** el catálogo que cayera en su
rango de costo/precio — no había forma de decir "esta marcación es solo para Electrodomésticos"
o "el plan de 12 cuotas sin interés solo aplica a Celulares" en un comercio con rubros mixtos.
Ahora ambos se pueden acotar, de forma **siempre opcional**, a una categoría de producto.

### Categoría específica vs. categoría padre

Al elegir una categoría en el selector, se puede elegir tanto una categoría "hoja" (ej.
"Heladeras") como una categoría "padre" (ej. "Electrodomésticos", que agrupa Heladeras,
Lavarropas, etc.):

- **Categoría específica**: la regla/plan aplica solo a productos cargados exactamente en esa
  categoría.
- **Categoría padre**: la regla/plan aplica a productos de **cualquiera** de sus categorías hijas
  directas (un nivel, no cadenas de 3+ niveles).

Si dos reglas de precio compiten por el mismo producto y rango de costo, gana la más específica:
**categoría específica > categoría padre > "Todas las categorías" (global)**. Esto solo importa
para reglas de precio (elige una única ganadora); en planes de cuotas no compiten entre sí — un
producto puede recibir varios planes a la vez (ver abajo).

### Diferencia clave entre reglas de precio y planes de cuotas

- **Reglas de precio**: elige **una sola** regla ganadora para calcular el precio (la más
  específica, según el orden de arriba).
- **Planes de cuotas**: **no** hay ganador único — un producto puede ofrecer varios planes de
  cuotas a la vez (3 cuotas y 6 cuotas simultáneas, por ejemplo). La categoría acá es un filtro de
  inclusión: cada plan decide, independientemente de los demás, si aplica o no a un producto dado.
  Un plan de cuotas también puede acotarse, además de por categoría, por un **rango de precio de
  catálogo** del producto (campos "Precio de producto desde/hasta" en el formulario) — no
  confundir con "Monto Mínimo/Máximo", que valida el monto de la venta al elegir el plan a mano en
  el simulador, un concepto distinto y ya existente antes de esta funcionalidad.

### Cómo se ve

- En la tabla de **"Reglas de precio"**, una columna **"Alcance"** muestra el nombre de la
  categoría (chip) o **"Global"**.
- En **"Recalcular lista"**, el resultado ahora también informa cuántas filas de la grilla de
  cuotas se **removieron** (`cuotas_removidas`) además de las generadas — pasa cuando un plan de
  cuotas que antes aplicaba a un producto deja de aplicar porque alguien le asignó una categoría o
  un rango de precio nuevo. Esas filas no se borran, quedan inactivas (no se muestran en la
  tienda) por si una factura o solicitud de crédito histórica las referencia.
- El botón **"Previsualizar impacto"** de una regla con categoría ya filtra la muestra de
  productos por esa categoría, no por todo el catálogo.

### Si no elegís categoría

El comportamiento es exactamente el mismo que antes de esta funcionalidad: la regla/plan aplica a
todo el catálogo que caiga en su rango de costo/precio, sin restricción de categoría. La opción
"Todas las categorías" (reglas de precio) / "Cualquier categoría" (planes de cuotas) es la que
queda seleccionada por defecto.

---

## Validaciones (texto que ve el usuario)

- "El costo desde no puede ser mayor al costo hasta" (reglas de precio).
- "Ningún producto cae en este rango" (previsualizar impacto).
- "Este precio lo generó una regla automática. Necesitás el permiso de override para editarlo a
  mano."
- "No tenés permiso para editar esta configuración" (costos de operación a crédito).
- "El descuento aplicado supera el máximo permitido para uno o más productos" (POS, con el
  detalle del % pedido vs. el tope de cada producto).
- "PIN incorrecto" / "El usuario no tiene privilegio de supervisor POS" (autorización presencial).
- "Autorización rechazada" (si el supervisor remoto rechaza en vez de aprobar).
- "La autorización de descuento no es válida o expiró. Solicitá una nueva autorización de
  supervisor." (si pasó demasiado tiempo entre la aprobación y el intento de facturar).
- "precioProductoHasta debe ser mayor a precioProductoDesde" (rango de precio de catálogo
  inválido en un plan de cuotas).

## Lo que NO se puede hacer

- **No se puede vender por debajo del piso** (costo o precio mínimo) sin autorización de
  supervisor, sea cual sea el motivo o quien lo pida — no hay excepción por rol o jerarquía.
- **No se puede reutilizar una autorización de descuento** para una segunda venta — se consume al
  crear la factura.
- **No se puede confiar solo en el bloqueo del POS** — es cosmético por diseño: el backend
  recalcula el mismo tope y exige la misma autorización al crear la factura, así que un intento
  de saltarse la UI (por ejemplo llamando a la API directo) también se rechaza.
- **No se puede editar a mano un precio generado por una regla** sin el permiso
  `INV_RGP_PRECIO_EDITAR`, aunque se tenga permiso para editar la lista de precios en general.
- **No se puede ver utilidad neta** si la configuración de costos de operación a crédito está
  inactiva — el reporte vuelve a mostrar solo bruto.
- **No se puede recalcular una lista pisando precios editados a mano** sin apagar a propósito
  "Preservar precios editados manualmente".

## Problemas frecuentes

- **"A dos usuarios el reporte de rentabilidad les da distinto"**: revisar las sucursales asignadas
  a cada uno y el período de cada pantalla. El reporte se recorta por sucursal; la solapa **Por
  Sucursal** de un usuario restringido va a mostrar sólo las suyas.
- **"El precio de un producto no cambia aunque edité la regla"**: las reglas no recalculan solas
  — hay que ejecutar "Recalcular lista" después de crear o editar una regla.
- **"No puedo cambiar el precio de un producto a mano"**: el precio viene de una regla (chip "Por
  regla") y el usuario no tiene `INV_RGP_PRECIO_EDITAR`. Pedir el permiso o pedirle a alguien que
  lo tenga que haga el ajuste.
- **"El reporte de rentabilidad no muestra utilidad neta"**: la configuración de costos de
  operación a crédito está inactiva, o no hay ninguna venta a crédito (con cuotas) en el período
  filtrado.
- **"El vendedor no puede cargar el descuento que necesita"**: el tope es real, calculado sobre
  el costo/precio mínimo del producto — no es un límite arbitrario. Si el descuento es legítimo,
  usar cualquiera de los dos caminos de autorización.
- **"El diálogo de autorización no aparece y el descuento de todos modos se rechaza al guardar"**:
  puede pasar si el producto se agregó por un flujo donde el tope todavía no se había resuelto al
  momento de escribir el % (se resuelve async apenas se elige el producto) — esperar un instante
  antes de cargar el descuento, o revisar que el producto tenga costo o precio mínimo cargados.
- **"Aprobé el pedido en Panel Supervisor pero la venta no se destrabó"**: revisar el indicador
  "Conectado" del panel — si dice desconectado, la aprobación quedó guardada pero el aviso en
  tiempo real no llegó al POS. El vendedor puede reintentar "Registrar Pago" una vez que la
  autorización ya está aprobada, sin tener que pedirla de nuevo.
- **"No encuentro las solicitudes de descuento del POS en Panel Supervisor"**: el acceso desde
  "Cobranzas → Autorizaciones" aterriza en la pestaña "Descuentos" (de Cobranzas, tema distinto)
  — hay que ir a la pestaña "Pendientes".
- **"El selector de categoría aparece vacío al crear una regla o un plan de cuotas"**: el usuario
  no tiene el permiso `INV_CAT_CATEGORIA_VER` (módulo INVENTARIO) — sin él, el selector se
  degrada mostrando solo la opción "Todas las categorías"/"Cualquier categoría" en vez de fallar.
  La regla/plan se puede guardar igual sin categoría; para poder elegir una, pedir el permiso.

## Limitaciones actuales

- **El alcance por categoría mira un solo nivel hacia arriba** (la categoría del producto y su
  padre directo) — no cadenas de 3 o más niveles de subcategorías.
- **No hay alcance por marca ni por producto puntual todavía** — el modelo de datos de reglas de
  precio ya tiene esas dos opciones preparadas (mismo mecanismo que categoría), pero se decidió no
  habilitarlas por ahora; una regla configurada con esos alcances no hace nada.
- **Dos planes de cuotas activos con la misma cantidad de cuotas para el mismo producto colapsan
  en uno solo** (gana el último recalculado) — pasa solo si dos planes distintos (ej. uno global y
  uno acotado por categoría) generan el mismo número de cuotas para un mismo producto; evitarlo
  usando cantidades de cuotas distintas entre planes que puedan coincidir en el mismo catálogo.
- **El motor de cuotas del ecommerce** todavía usa un cálculo de interés simple, no el motor de
  cuotas corregido que usa el POS/solicitud de crédito — ver `docs/info/aclaracion-gastos-cuotas.md`.
- **El tope de descuento no diferencia por rol ni por perfil** — es universal: cualquier exceso,
  de cualquier usuario, pide la misma autorización.
- **No hay revendedores con precio propio** todavía (Fase 5 del proyecto, sin empezar) — hoy un
  cliente revendedor se maneja igual que cualquier otro cliente con lista propia.
- **El descuento global de factura no tiene un tope visible por sí mismo en el resumen** —el
  aviso de autorización aparece recién al confirmar la venta, prorrateado por producto.

## Documentos relacionados

- `guia-alcance-por-sucursal.md` — qué recorta el reporte de rentabilidad según las asignaciones
  del usuario.
- `guia-listas-de-precios.md` — la base sobre la que corren las reglas de precio y el tope
  (listas, prioridad, precio mínimo/máximo).
- `guia-inventario.md` — productos, costo (`precio_costo`) y stock que alimentan las reglas y el
  tope.
- `guia-sucursales-cajas-pos.md` — apertura/cierre de caja, que también usa PIN de supervisor
  (mismo mecanismo de `autorizaciones_caja`, distinto motivo).
- `guia-cobranzas.md` — Panel Supervisor también atiende autorizaciones de descuento/exoneración
  de mora, un flujo distinto al de esta guía aunque comparta pantalla.
- `guia-solicitud-credito.md` — otro punto donde se resuelve precio y financiación de productos.
- `docs/plan-motor-precios-rentabilidad.md` — diseño técnico completo, para desarrollo.
