# Arquitectura y datos de la demo

## Sitio

- `/`: inicio local Viña del Mar.
- `/flota/`: nueve versiones con filtros y total por fechas.
- `/listing/{slug-actual}/`: nueve fichas conservando URL.
- `/rent-a-car-valparaiso/` y `/rent-a-car-concon/`: recorridos desde Viña del Mar.
- `/respaldo-suzuval/`, `/contacto/`, `/requisitos/`.
- `/descubre-la-costa/`: índice editorial.
- Tres guías en `/descubre-la-costa/{slug}/`.
- Equivalentes públicos bajo `/en/`.
- `/admin/`: panel en español para el equipo local, no indexable.
- `/deliverables/`: centro de entrega de la propuesta, no indexable.

La lista exacta generada está en `data/routes.json`; `docs/url-map.csv` conserva las nueve URLs de fichas. `scripts/build.mjs` genera el HTML desde datos y plantillas. Los archivos generados se pueden servir con cualquier servidor estático; no requieren Node en producción para navegar.

## Interfaces internas

`data/cars.json`: modelo/version, precio neto, categoría, transmisión, combustible, atributos comprobados, fotografía y fuente. Los campos no verificados son null. No se rellena la capacidad de los automáticos con supuestos.

`model.js`: validación de fechas, cotización, disponibilidad, actualización de solicitudes, bloqueos y CSV. `store.js`: persistencia versionada y eventos. Sitio y panel comparten `suzuval-demo-v2` en localStorage. `suzuval-trip` conserva las fechas entre rutas e idiomas. Sin API pública ni servidor de reservas.

Las fechas seleccionadas son horas locales del navegador. El prototipo se presenta en Chile; una operación real debe fijar explícitamente America/Santiago en servidor. La demo no resuelve cambios de zona entre dispositivos, horario de verano ni concurrencia multiusuario.

Una solicitud nueva no bloquea. Confirmada y en curso bloquean; cancelada y finalizada no bloquean. Validación por intervalos semiabiertos [retiro, devolución); permite retiro exactamente a la devolución anterior. Unidad inactiva no asignable. Mantenimiento solapado bloquea la confirmación y no puede crearse sobre reserva bloqueante. Desactivar una unidad con reserva vigente/próxima confirmada exige reasignarla o cancelarla antes.

## Eventos locales

| Evento | Propiedades no personales | Significado |
|---|---|---|
| search | days, location | Búsqueda válida enviada |
| vehicle_view | carId | Ficha abierta |
| request_start | carId | Inicio del formulario |
| request_complete | carId, days | Solicitud persistida correctamente |
| contact_click | channel | Clic en teléfono/correo, no conversación confirmada |

Se guardan hasta 500 eventos, sin PII. Los contadores no equivalen a usuarios únicos ni tasas de conversión. Producción requiere consentimiento/configuración aplicable y conciliación con estados comerciales.

## Regeneración

`npm run build` regenera las 40 páginas y admin. `npm test` verifica reglas. Los archivos de entrega se generan por scripts separados. No modificar HTML generado manualmente como fuente principal.
