# SOP: Lógica y Hooks ## Gestión de Estado (Hooks) ### `useReservations` - **Propósito**: Abstracción de Supabase para CRUD de reservas. - **Estado**: Lista de reservas (`data`), `loading`, `error`. - **Métodos**: - `fetchReservations()`: `Select * from reservations`. - `createReservation(data)`: Insert. - `updateReservation(id, data)`: Update. Detección de cambio en `government_registration` para payload de Webhook. - `deleteReservation(id)`: Delete. - **Realtime**: Suscripción a cambios en tabla `reservations` para actualizar vista automáticamente. ### `useFormCalculation` (dentro del Form) - **Propósito**: Cálculos derivados instantáneos. - **Input**: Valores actuales del form (watch). - **Output**: `totalPeople`, `totalDays`. ## Lógica de Webhook (Simulación en Cliente) > **Nota**: Idealmente esto se hace con Database Triggers, pero por simplicidad inicial y control, lo gestionaremos en la capa de servicio del cliente (`useReservations`) antes de enviar a Supabase, o inmediatamente después del éxito. **Regla de Disparo**: 1. Capturar valor previo de `government_registration` (en Update). 2. Si `previos_value` es EMPTY/NULL Y `new_value` NO es EMPTY: -> Ejecutar `triggerRegistrationWebhook(reservation)`. **Endpoint Mock**: - URL: (Definir en .env) - Method: POST - Body: Definido en `gemini.md`. ## Tipos (TypeScript) Definir interfaces estrictas en `src/types/supabase.ts` (o generado) y `src/types/app.ts`.