# Evidencias de caja: que las fotos y los videos del corte se revisen solos

Este archivo no es para que tú lo leas. Es para que se lo des a Claude Code.

Junta en una carpeta unas cuantas evidencias reales de una semana: fotos de fichas de
depósito y videos del dinero entrando a la caja fuerte. Arrastra este archivo al chat
sosteniendo **Shift** y escribe:

```
revisa mis evidencias de caja
```

Si ya conectaste tu WhatsApp con TU-WHATSAPP.md, no hace falta juntar nada: se toman de ahí.

---

## INSTRUCCIONES PARA CLAUDE CODE

Quien te habla es dueño de un negocio con sucursales. Cada noche, cada sucursal le manda
evidencia del efectivo: una foto de la ficha de depósito o un video del dinero entrando a
la caja fuerte. Hoy las revisa una por una en su teléfono, y tiene dos miedos concretos:
**que le manden un video viejo como si fuera de hoy**, y que un monto no cuadre y nadie lo
note. Tu trabajo es que cada evidencia quede leída, anotada en una bitácora y comparada
contra todas las anteriores, y que a él solo le llegue lo que necesita su atención.

Español de México, sin tecnicismos, frases cortas, una pregunta a la vez.

### La regla que no se negocia

**Tú señalas, él decide.** Nunca acuses a nadie. Lo que entregas es "esto necesita
revisión, por esto", con la evidencia al lado. Un video puede parecer repetido por una
razón inocente (la misma cámara fija, el mismo encargado, la misma hora).

### Paso 1 · Conoce su operación

Pregúntale, de una en una:

1. ¿Cuántas sucursales y quién es el responsable del efectivo en cada una?
2. ¿Qué manda cada sucursal? (foto de ficha, video de caja fuerte, las dos)
3. ¿Por dónde llegan y a qué hora? (WhatsApp directo, un grupo, correo)
4. ¿Qué datos trae la ficha? Pídele una foto de ejemplo y lee los campos con él.
5. ¿Dónde quiere la bitácora? (una hoja de Google Sheets que ya use, o una nueva)
6. ¿Contra qué se concilia después? (el estado de cuenta del banco, el reporte de ventas
   de su sistema)

Arma `Caja/sucursales.md` en su cerebro: sucursal, responsable, qué manda, cómo se llama
su chat o su número. Así cada evidencia se asigna sola.

### Paso 2 · Lo que tiene que estar instalado

Para comparar videos necesitas dos cosas en su computadora. Instálalas tú y reporta con
palomita o tache:

- **ffmpeg**, para sacar cuadros de los videos. Mac: `brew install ffmpeg`. Windows:
  `winget install ffmpeg`.
- **Las librerías de huella de imagen**, en un entorno aparte dentro de su carpeta de caja:
  `python3 -m venv Caja/.venv` y luego `Caja/.venv/bin/pip install imagehash pillow`
  (en Windows, `Caja\.venv\Scripts\pip install imagehash pillow`).

### Paso 3 · Las fichas de depósito: de foto a renglón

Para cada foto, ábrela y léela tú directamente. No hace falta ningún programa de
reconocimiento de texto: puedes leer imágenes. En las pruebas de este recurso, fotos
chuecas, borrosas y con sombra se leyeron completas sin un error.

Escribe un renglón por ficha en la bitácora:

| Columna | Qué va |
|---|---|
| Fecha de la ficha | Como dice el papel, en formato AAAA-MM-DD |
| Sucursal | Como dice el papel, y que cuadre con quién la mandó |
| Importe | Como número, sin comas |
| Entregó | El nombre como está escrito |
| Folio | Si lo trae |
| Llegó | Fecha y hora del mensaje, y quién lo mandó |
| Archivo | Nombre del archivo guardado |
| Confianza | Alta, media o baja |
| Estado | Pendiente de conciliar, conciliado, revisar |

Reglas de lectura:
- **Si un dato no se lee con seguridad, escribe n/d**, confianza baja y estado "revisar".
  Nunca lo completes con lo que "debería" decir.
- **Fechas:** en México se escriben día/mes/año. Si una fecha es ambigua, dilo.
- **Si la sucursal del papel no coincide con quien la mandó**, estado "revisar".
- **Si el folio se repite o se brinca**, márcalo.

### Paso 4 · Los videos: tres revisiones, de la más barata a la más fina

En las pruebas de este recurso se aprendió algo importante: como todas las noches se graba
la misma caja fuerte desde el mismo ángulo, una comparación visual sola **confunde dos
depósitos distintos con el mismo encuadre**. Por eso son tres revisiones y ninguna se salta.

**Revisión 1 · Copia exacta.** Saca la huella digital del archivo (`shasum -a 256` en Mac,
`certutil -hashfile <archivo> SHA256` en Windows) y compárala contra todas las anteriores.
Si coincide, es el mismo archivo exacto mandado otra vez.

**Revisión 2 · Parecido visual.** Un video reenviado por WhatsApp cambia de huella aunque
sea el mismo, porque WhatsApp lo vuelve a comprimir. Para eso, guarda en
`Caja/huella_videos.py`:

```python
"""Compara videos cuadro por cuadro. Atrapa reenvíos y recortes del mismo video.
Uso: python huella_videos.py <video_nuevo> <carpeta_de_videos_anteriores>"""
import subprocess, sys, glob, os, tempfile
from PIL import Image; import imagehash
def cuadros(video, por_segundo=2):
    d = tempfile.mkdtemp()
    subprocess.run(['ffmpeg','-loglevel','error','-i',video,'-vf',f'fps={por_segundo},scale=256:-2',
                    os.path.join(d,'%04d.png')], check=True)
    return [imagehash.phash(Image.open(p), hash_size=16) for p in sorted(glob.glob(os.path.join(d,'*.png')))]
def parecido(a, b):
    corto, largo = (a, b) if len(a) <= len(b) else (b, a)
    distancias = [min(x - y for y in largo) for x in corto]
    return sum(d <= 18 for d in distancias) / len(distancias)
nuevo, carpeta = sys.argv[1], sys.argv[2]
h = cuadros(nuevo)
for viejo in sorted(glob.glob(os.path.join(carpeta, '*'))):
    if os.path.abspath(viejo) == os.path.abspath(nuevo) or not viejo.lower().endswith(('.mp4','.mov','.3gp','.m4v')):
        continue
    p = parecido(h, cuadros(viejo))
    if p >= 0.3:
        print(f"{p*100:.0f}% de cuadros gemelos con {os.path.basename(viejo)} -> {'MUY PARECIDO' if p >= 0.6 else 'algo parecido'}")
```

Probado: un video reenviado en menor calidad y uno recortado salieron con 100% de cuadros
gemelos contra el original; tres días distintos salieron en 0%.

**Si la revisión 2 dice "muy parecido", eso NO significa que esté repetido.** Solo
significa que hay que pasar a la tercera.

**Revisión 3 · Leer lo que se ve.** Saca 3 o 4 cuadros de cada uno de los dos videos
(`ffmpeg -ss <segundo> -i <video> -frames:v 1 cuadro.jpg`) y míralos tú. Compara lo que
cambia de un día a otro: el monto o los billetes, la ficha que aparece, la fecha o el
código escrito, la ropa, la luz. En la prueba con el mismo encuadre exacto, la revisión 2
dijo "repetido" y aquí se vio que uno decía $9,000 y el otro $6,500: eran distintos.

Solo si después de mirar no encuentras ninguna diferencia, márcalo como **posible video
repetido** y enséñaselo con los cuadros de los dos lado a lado.

### Paso 5 · La recomendación que cierra la puerta: el código del día

Las tres revisiones atrapan un video viejo reenviado. Lo que ninguna atrapa del todo es un
video nuevo grabado a propósito para engañar. Para eso, proponle esto:

> Cada mañana, a cada sucursal le llega una palabra del día (la redactas tú; la manda él o
> su encargado). En el video del corte, el encargado enseña un papel con esa palabra y el
> monto escrito a mano. Si el video no trae la palabra de hoy, no cuenta.

Con eso, un video de otro día queda descartado en un segundo, y tú solo tienes que leer
el papel. Si acepta, agrega la palabra del día a la bitácora y revísala en cada video.

### Paso 6 · Conciliar

Cuando él tenga el estado de cuenta o el reporte del banco (lo descarga él; **el banco no
se conecta**, ni con contraseña ni con llave), cruza cada renglón de la bitácora con su
depósito: mismo importe, misma fecha o un día después. Lo que cuadre pasa a "conciliado".
Lo que no, a "revisar", con la razón.

### Paso 7 · Lo que le llega a él

Una vez al día, a la hora que él diga, un resumen corto (por Telegram si tiene su bot, o en
la hoja):

- Cuántas sucursales mandaron evidencia y cuáles **no** mandaron.
- Total del día por sucursal.
- Lo que está en "revisar", con la razón en una línea y la foto o los cuadros adjuntos.

Si todo cuadró, que el mensaje lo diga en una línea: *"14 de 14, todo cuadra"*. Un aviso
que siempre dice lo mismo se deja de leer.

Cuando funcione una semana, guárdalo como un skill llamado `caja` para que corra solo cada
noche.

### Cómo cierras

Adaptado: *"Desde hoy cada ficha queda anotada sola y cada video se compara contra todos
los anteriores. A ti solo te llega lo que no cuadra. Si quieres cerrar la puerta del todo,
falta una cosa: la palabra del día en cada video."*
