# Reglas de clasificación — demo sintética v3

Planilla de pedidos de una PYME del Alto Valle. Cada fila es un pedido
cargado a mano. El problema real: cuando se cargan pedidos por error dos
veces, o se corrige un pedido generando una segunda fila con datos
parecidos, la planilla queda con filas de más y no se sabe cuáles. Esta demo
separa esos casos en tres categorías para que una persona los revise.

**Las tres categorías son mutuamente excluyentes: cada fila queda en una y
solo una. Ninguna fila se borra ni se oculta.**

---

## 1. Repetición exacta

**Qué es:** la misma fila cargada dos veces. Todos los campos son idénticos
— mismo número de pedido, fecha, cliente, producto, cantidad, precio y
total. La comparación ignora mayúsculas, acentos y espacios repetidos: dos
cargas se consideran idénticas cuando coinciden una vez normalizados esos
detalles de tipeo. Lo que no se normaliza son números ni cantidades.

**Cómo se detecta:** se compara la fila completa, campo por campo, contra
todas las filas anteriores. Si coincide en todo, se marca `repeticion_exacta`
y el motivo indica el número de la fila original con la que es idéntica.

**Qué hacer:** una persona confirma a simple vista que son iguales y decide qué
hacer con la copia (borrarla o conservarla junto con la original). La decisión
final es siempre de la persona que conoce el negocio.

**En el dataset de esta demo:** 2 filas (filas 15 y 17, idénticas a las
filas 2 y 1 respectivamente).

---

## 2. Duplicado probable

**Qué es:** el mismo pedido de negocio — mismo cliente, mismo producto,
mismo día — pero con datos que no coinciden entre las dos filas. Puede ser
una corrección, una recarga con un número nuevo, o dos pedidos legítimos
del mismo cliente el mismo día.

**Cómo se detecta:** se agrupan las filas por la combinación
**cliente + producto + fecha**. Dentro de cada grupo, si hay más de una
fila y los datos difieren (otro número de pedido, otra cantidad, otro
precio, otro total), las filas siguientes a la primera se marcan
`duplicado_probable`. El motivo enumera exactamente qué campos no coinciden
y contra qué fila se comparan.

**Contra qué fila se compara — fila de referencia:** la comparación usa
como referencia **la primera fila del grupo en el orden de entrada**, no una
fila confirmada como el pedido real. El script no sabe cuál es la correcta:
toma la que entró primero y señala las siguientes. Esa elección es
arbitraria respecto del negocio (si la fila correcta fue la segunda, la
herramienta marca la primera como `sin_alerta_bajo_estas_reglas`) y por eso el
resultado requiere revisión humana. Los motivos indican «la fila N», siendo N
el número de fila en `entrada.csv` contado desde 1 en los datos, sin
encabezado; ese número es la columna `fila` de `salida.csv`, así que cada
referencia se puede ubicar en el archivo entregado.

**Qué hacer:** **requieren revisión humana.** A diferencia de la repetición
exacta, aquí no se puede decidir automáticamente cuál es la correcta: hay
que consultar el remito, el cliente o el sistema de facturación. Por eso se
conservan visibles en la salida con su motivo, para que el operador las
resuelva una por una.

**Variante — datos idénticos con otro número de pedido:** si las filas
coinciden en todos los datos salvo el `pedido_id`, también se marca
`duplicado_probable` — no es una repetición exacta porque el identificador
cambió, y podría tratarse de una recarga con numeración nueva o de dos
pedidos legítimos — con un motivo explícito que lo indica.

**En el dataset de esta demo:** 3 filas (filas 24, 26 y 28).

---

## 3. Sin alerta bajo estas reglas

**Qué es:** la fila **no fue marcada** por estas reglas: no entró en ninguno
de los dos grupos anteriores. «No marcada» no es lo mismo que «sin relación
con ningún caso»: las filas de referencia contra las que se compara una fila
marcada quedan en este grupo (la herramienta señala la fila siguiente del
grupo, no la primera). En esta demo son las filas 1, 2, 23, 25 y 27, y el
motivo de cada una en `salida.csv` indica a qué fila marcada hace referencia.

**Qué hacer:** nada por ahora. Quedan visibles en la salida con la columna
`fila` para poder rastrear cada fila contra `entrada.csv`.

---

## Resumen de cifras

**Cómo se leen (formulación R01):** 23 filas no marcadas por estas reglas,
2 repeticiones exactas y 3 filas para revisar. **Los conteos no abarcan todas
las referencias involucradas:** cada caso enfrenta dos filas —la marcada y la
de referencia—, y las 5 filas de referencia (1, 2, 23, 25 y 27) quedan dentro
del grupo de las 23 no marcadas. En total participan de los 5 casos 10 filas,
ya contadas dentro de las 28; el «23» no debe leerse como «23 filas sin
relación con ningún caso». El motivo de cada fila de referencia en
`salida.csv` indica contra qué fila marcada se compara.

Las cifras exactas se calculan al ejecutar `clasificar.py` (ver salida del
script). La consistencia se verifica en la propia salida:

    total de filas = sin_alerta_bajo_estas_reglas + repeticiones exactas + duplicados probables

En esta demo: 28 = 23 + 2 + 3. La salida (`salida.csv`) trae todas las filas
de entrada con la columna `fila` —número de fila en `entrada.csv` contado
desde 1 en los datos, sin encabezado— más `clasificacion` y `motivo`, así
que cada fila se puede rastrear contra el archivo original. El script es
idempotente: corridas repetidas sobre la misma `entrada.csv` generan la
misma `salida.csv`.

---

## Excepciones y límites de la demo

- **Datos 100% sintéticos.** Nombres de clientes, productos y cifras
  inventados con fines ilustrativos. No hay datos reales de clientes ni
  atribución comercial alguna. Rótulo: *demo sintética v3*.
- **La detección de duplicados probables depende de la clave
  cliente + producto + fecha.** Dos pedidos distintos del mismo cliente,
  del mismo producto y el mismo día se marcarán como duplicado probable:
  la herramienta los señala, la persona decide. Es un sesgo conservador
  (prefiere marcar y revisar antes que borrar de más).
- **No se detectan duplicados con fecha distinta.** Un pedido cargado el
  lunes y recargado el martes con distinta fecha no se marca: la clave no
  coincide. Es un límite conocido de la regla, no un error.
- **La comparación ignora mayúsculas, acentos y espacios repetidos.**
  «Corralón El Cipres» y «corralon el cipres» se consideran el mismo
  cliente. Lo que no se normaliza son números ni cantidades.
- **La fila de referencia de un grupo es la primera que entró**, no una fila
  confirmada como el pedido real. Si la fila correcta fue la segunda, la
  herramienta marca la primera como sin_alerta_bajo_estas_reglas: por eso los duplicados probables
  requieren revisión humana y no se resuelven automáticamente.
- **No valida coherencia interna** (por ejemplo, que cantidad × precio =
  total). La demo clasifica repeticiones y duplicados, no errores
  aritméticos.
