# Ruta ClickDelivery 1.0 → 2.0

## Fuentes funcionales existentes
- APK Administrador.
- APK Comercio.
- APK Usuario.
- APK Repartidor.
- Master Control Center Fase 1.
- Plan Maestro nacional.

## Estrategia
No clonar constructor visual legado. Recuperar los flujos funcionales y migrarlos a una API propia.

### Prioridad 1 — Core operativo
- Auth y organizaciones.
- White‑Label / Franquicia.
- contratos y documentos.
- comercios y repartidores.
- viajes y estados.
- auditoría y cargos.

### Prioridad 2 — Logistics Core
- PostGIS.
- ubicación del repartidor.
- geocercas pickup/delivery.
- ranking/asignación.
- PIN y evidencia.
- realtime/websocket.

### Prioridad 3 — APIs para APK
Crear una capa compatible con los flujos observados en las APK nuevas/migradas: Cliente, Comercio, Repartidor y Administrador.

### Prioridad 4 — White‑Label App Builder
Una base de código y configuración por tenant: package id, nombre, logo, colores, banners, dominios y feature flags; sin fork manual por cliente.

## Migración de datos V0.3 → V0.4

V0.4 incluye un importador para una base SQLite existente de V0.3.

1. Crear/migrar PostgreSQL primero:

```bash
npm run db:migrate
```

2. Indicar la base V0.3:

```bash
V03_SQLITE_PATH=/ruta/clickdelivery-v03.sqlite npm run db:import-v03
```

El importador conserva organizaciones, usuarios, contratos, aceptaciones, documentos, repartidores, comercios, viajes, eventos, cargos, ledger, banners, builds y auditoría. Las sesiones se omiten por defecto y las claves de idempotencia antiguas no se importan.

Para conservar sesiones de desarrollo de forma explícita:

```bash
IMPORT_V03_SESSIONS=1 V03_SQLITE_PATH=/ruta/clickdelivery-v03.sqlite npm run db:import-v03
```


## V0.4.1 Logistics Core

Aplicar `004_v04_logistics_core.sql` después de las migraciones V0.4 existentes. Es aditiva: crea tablas logísticas, identidades móviles y agrega columnas de verificación/asignación a `trips`. No elimina los datos importados desde V0.3.

Después de migrar, ejecutar nuevamente `npm run db:seed` solo en desarrollo para crear las identidades demo de Cliente/Comercio/Repartidor/Dispatcher.

## V0.5 Mobile & Operations

Después de V0.4.1, aplicar las migraciones en orden normal con:

```bash
npm run db:migrate
```

V0.5 agrega:
- `005_v05_mobile_operations.sql`: storage privado, dispositivos, inbox/push outbox, feature flags móviles e integration outbox.
- `006_v05_mobile_hardening.sql`: unicidad de token push activo por proveedor.

Son migraciones aditivas. No eliminan viajes, usuarios, comercios, repartidores ni cargos existentes.

Los binarios de evidencia no se migran automáticamente desde claves antiguas: una evidencia V0.5 nueva debe pasar por el flujo de upload privado para obtener `private_storage_object` real.

## V0.6 APK Integration

Después de V0.5, ejecutar las migraciones en orden normal:

```bash
npm run db:migrate
```

V0.6 agrega `007_v06_apk_integration.sql`, que:
- habilita `realtime_websocket` en feature flags móviles;
- corrige IDs provisionales de builds anteriores hacia los package IDs reales auditados de Android;
- no elimina datos operativos.

Package IDs que deben conservarse para futuras actualizaciones Android:

- `com.clickdelivery.administrador`
- `com.clickdelivery.comercio`
- `com.clickdelivery.usuario`
- `com.clickdelivery.repartidor`

La integración móvil nueva debe realizarse en los proyectos fuente React Native/constructor visual legado exportados. No se recomienda decompilar, parchear y volver a firmar las APK de producción, porque una firma distinta impediría una actualización normal sobre la app instalada/publicada.


## V0.6.1 Mobile Production

Ejecutar:

```bash
npm run db:migrate
```

La migración `008_v061_mobile_production.sql` es aditiva y agrega:
- refresh tokens móviles;
- operaciones de sync offline;
- idempotencia GPS por `client_point_id`;
- catálogo, direcciones y pedidos;
- billetera y liquidaciones del repartidor;
- RLS sobre las nuevas tablas tenant.

No cambia los package IDs ni los assets oficiales. Antes de producción, ejecutar el smoke completo sobre PostgreSQL/PostGIS y realizar backup verificable.
