# Actualizar el plano del Ubicador

Esta guía sirve para personas y para Claude (Claude Code o Claude en el chat). Cada vez que llegue un DWG nuevo del parque, se sigue este procedimiento. No hace falta tocar el código.

## La regla de oro

**El DWG manda en la geometría; la app manda en la clasificación.**

- Parcelas, números, líneas y rótulos salen siempre del DWG.
- A qué sector y jardín pertenece cada parcela se corrige en la app (Editar sectores). Esa clasificación se guarda aparte y sobrevive a los cambios de DWG, porque cada parcela se reconoce por su posición en el plano (tolerancia de 0.8 m).

## Índice de versiones

`plano/versiones.json` es el índice. Por cada DWG registrado guarda:

| Campo | Para qué |
|---|---|
| `id` | Fecha y hora del **último guardado interno del DWG** (no la del nombre del archivo) |
| `archivo` | Nombre original |
| `sha256` | Huella del archivo: detecta si ya se registró ese mismo archivo |
| `huella_guid` | Identificador interno del dibujo: confirma que es el mismo plano de origen |
| `parcelas`, `sectores` | Conteos |
| `cambios` | Resumen contra la versión anterior |

`vigente` indica la versión que usa la app.

Cada versión tiene su carpeta `plano/versiones/<id>/`:

- `plano.dwg`: copia del archivo original
- `meta.json`: datos internos del DWG
- `data.json`: parcelas, sectores, contornos y textos tal como los usa la app
- `flat.json.gz`: todas las líneas y textos, con los bloques expandidos
- `CAMBIOS.md`, `cambios.json`, `cambios.png`: comparación contra la versión anterior

## Cómo saber si un DWG es el más nuevo

No te fíes del nombre del archivo. El DWG guarda por dentro la fecha de su último guardado en AutoCAD y las horas acumuladas de edición, y el script las lee. Ejemplo real:

- `Parque_Jardín_Las_Flores_20260620.dwg` se guardó por última vez el **29/08/2026 a las 23:03**, después de la fecha de su nombre.

El script se detiene si le das un DWG más antiguo que el vigente o de otro dibujo de origen. Solo continúa si se le pasa `--forzar`.

## Procedimiento

```
cd ubicador
npm install                                        # solo la primera vez
python3 scripts/actualizar_plano.py "Parque_Jardín_Las_Flores_AAAAMMDD.dwg" --publicar
```

El script:

1. Lee el DWG y expande bloques, arcos y textos.
2. Extrae parcelas (número y contorno real), sectores y rótulos.
3. Verifica que sea más nuevo que el vigente y del mismo dibujo.
4. Lo guarda como versión nueva y lo compara con la vigente.
5. Clasifica los rótulos (clientes, vendedores, cuentas, monumentos, códigos).
6. Actualiza `plano/versiones.json` y rearma la app.
7. Con `--publicar`, sube la versión a la base de datos del servidor. El servidor conserva el id de cada parcela, con su sector y sus fallecidos, y responde cuántas conservó, cuántas son nuevas y cuántas se dieron de baja. Necesita `plano/publicar.json` con la dirección de la API y la clave de importación.

Después:

1. Lee `plano/versiones/<id>/CAMBIOS.md`.
2. Si no usaste `--publicar`, súbela después con `python3 scripts/publicar_version.py`.
3. En la app: inicio → **Ver cambios en el mapa** para revisar cada cambio sobre el plano.
4. Si aparecen parcelas nuevas sin sector, asígnalas en **Editar sectores**.
5. En **Capas y vendedores**, revisa los vendedores "por revisar" que hayan aparecido con el plano nuevo.

Para quitar los nombres de vendedores de forma definitiva, agrega `--sin-vendedores` al comando.

## Qué detecta la comparación

| Cambio | Cómo se reconoce |
|---|---|
| Parcela nueva | Número de parcela en una posición donde antes no había ninguno |
| Parcela eliminada | Número que desapareció de su posición |
| Renumerada | Misma posición, otro número |
| Movida | Mismo sector y número, desplazada menos de 3 m (bloques reacomodados en CAD) |
| Rótulo cambiado | Texto de monumento, familia o código (M-018, SOF-9570…) que cambió en su lugar |
| Sector nuevo | Rótulo grande de sector que no existía |
| Zonas de dibujo | Grupos de líneas agregadas o borradas, con su sector cercano |
| Duplicados | Números de parcela pegados dos veces encima de sí mismos |

## Reglas para quien dibuja en AutoCAD

1. Trabajar **siempre sobre el mismo DWG**, sin copiarlo a un archivo nuevo desde cero, para que conserve su huella interna.
2. Números de parcela en la capa `1`, con altura de texto menor de 0.6 m.
3. Números de sector en la capa `sectores`, con altura de 1.5 m o más.
4. Cada parcela es un rectángulo cerrado por líneas, con su número adentro.
5. No mover el plano completo ni cambiar sus unidades (metros). Todo se compara por coordenadas.
6. Evitar pegar números duplicados. La comparación los avisa.

## Si la app ya está en servidor con base de datos

La clasificación de sectores se guarda por sector, con la lista de posiciones de sus parcelas. Al cambiar el DWG, las parcelas que no se movieron conservan su sector. Las movidas menos de 0.8 m también lo conservan. Las nuevas quedan "sin sector" (rojo en el editor).
