Files
AnchorOS/docs/RESOURCES_UPDATE.md

252 lines
8.7 KiB
Markdown

# Actualización de Recursos - AnchorOS
## Cambios Realizados
### Recursos Anteriores (Eliminados)
Los recursos tenían nombres descriptivos como:
- "Sillón Pedicure 1", "Sillón Pedicure 2", "Sillón Pedicure 3"
- "Estación Manicure 1", "Estación Manicure 2", "Estación Manicure 3", "Estación Manicure 4"
- "Estación Maquillaje"
- "Cama Pestañas"
### Nuevos Recursos (Implementados)
Los recursos ahora usan códigos alfanuméricos estandarizados:
| Tipo | Código | Cantidad | Descripción |
|------|--------|----------|-------------|
| Maquillaje | `mkup` | 3 | Estaciones de maquillaje |
| Pestañas | `lshs` | 1 | Cama de pestañas |
| Pedicure | `pedi` | 4 | Estaciones de pedicure |
| Manicure | `mani` | 4 | Estaciones de manicure |
### Formato de Nombres
Los recursos siguen el patrón: `{código}-{número}`
Ejemplos:
- `mkup-01`, `mkup-02`, `mkup-03`
- `lshs-01`
- `pedi-01`, `pedi-02`, `pedi-03`, `pedi-04`
- `mani-01`, `mani-02`, `mani-03`, `mani-04`
## Detalles por Tipo
### Maquillaje (`mkup`)
- **Total:** 3 estaciones por location
- **Tipo:** station
- **Capacidad:** 1 persona por estación
- **Uso:** Servicios de maquillaje profesional
### Pestañas (`lshs`)
- **Total:** 1 cama por location
- **Tipo:** station
- **Capacidad:** 1 persona
- **Uso:** Extensiones de pestañas
### Pedicure (`pedi`)
- **Total:** 4 estaciones por location
- **Tipo:** station
- **Capacidad:** 1 persona por estación
- **Uso:** Servicios de pedicure
### Manicure (`mani`)
- **Total:** 4 estaciones por location
- **Tipo:** station
- **Capacidad:** 1 persona por estación
- **Uso:** Servicios de manicure
## Impacto en el Sistema
### Bookings Eliminados
⚠️ **IMPORTANTE:** Debido a la restricción `CASCADE DELETE` en la tabla `resources`, todos los bookings que referenciaban los recursos anteriores han sido eliminados.
Esto significa que:
- No hay bookings activos en el sistema
- Los clientes deberán reprogramar sus citas
- Se debe informar a los usuarios del cambio
### Cómo Afecta al Kiosko
El kiosko ahora asignará recursos usando los nuevos códigos:
- Cuando un cliente solicita maquillaje → asigna `mkup-XX`
- Cuando un cliente solicita pestañas → asigna `lshs-01`
- Cuando un cliente solicita pedicure → asigna `pedi-XX`
- Cuando un cliente solicita manicure → asigna `mani-XX`
### Mapeo de Servicios a Recursos
Para mantener la consistencia, los servicios deberían asignarse a los recursos correctos:
| Servicio | Recurso Recomendado | Notas |
|----------|---------------------|-------|
| Maquillaje Profesional | `mkup-XX` | Cualquiera de las 3 estaciones |
| Extensión de Pestañas | `lshs-01` | Único recurso disponible |
| Pedicure Spa | `pedi-XX` | Cualquiera de las 4 estaciones |
| Manicure Gel | `mani-XX` | Cualquiera de las 4 estaciones |
| Uñas Acrílicas | `mani-XX` | Cualquiera de las 4 estaciones |
## Ejecutar la Migración
### Opción 1: Via Supabase Dashboard
1. Ve a: https://supabase.com/dashboard/project/pvvwbnybkadhreuqijsl/sql
2. Copia el contenido de `supabase/migrations/20260116010000_update_resources.sql`
3. Pega en el SQL Editor
4. Haz clic en "Run"
5. Verifica el output en la consola
### Opción 2: Via CLI (si está configurado)
```bash
supabase db push
```
## Verificar la Migración
### Consulta SQL para Ver Recursos
```sql
SELECT
l.name AS location,
r.name AS resource_code,
r.type AS resource_type,
r.capacity,
r.is_active
FROM resources r
JOIN locations l ON l.id = r.location_id
WHERE l.is_active = true
ORDER BY l.name, r.name;
```
### Resultado Esperado
```
location | resource_code | resource_type | capacity | is_active
------------------|---------------|---------------|----------|----------
ANCHOR:23 - Via KLAVA | lshs-01 | station | 1 | true
ANCHOR:23 - Via KLAVA | mani-01 | station | 1 | true
ANCHOR:23 - Via KLAVA | mani-02 | station | 1 | true
ANCHOR:23 - Via KLAVA | mani-03 | station | 1 | true
ANCHOR:23 - Via KLAVA | mani-04 | station | 1 | true
ANCHOR:23 - Via KLAVA | mkup-01 | station | 1 | true
ANCHOR:23 - Via KLAVA | mkup-02 | station | 1 | true
ANCHOR:23 - Via KLAVA | mkup-03 | station | 1 | true
ANCHOR:23 - Via KLAVA | pedi-01 | station | 1 | true
ANCHOR:23 - Via KLAVA | pedi-02 | station | 1 | true
ANCHOR:23 - Via KLAVA | pedi-03 | station | 1 | true
ANCHOR:23 - Via KLAVA | pedi-04 | station | 1 | true
TEST - Salón Principal | lshs-01 | station | 1 | true
TEST - Salón Principal | mani-01 | station | 1 | true
TEST - Salón Principal | mani-02 | station | 1 | true
TEST - Salón Principal | mani-03 | station | 1 | true
TEST - Salón Principal | mani-04 | station | 1 | true
TEST - Salón Principal | mkup-01 | station | 1 | true
TEST - Salón Principal | mkup-02 | station | 1 | true
TEST - Salón Principal | mkup-03 | station | 1 | true
TEST - Salón Principal | pedi-01 | station | 1 | true
TEST - Salón Principal | pedi-02 | station | 1 | true
TEST - Salón Principal | pedi-03 | station | 1 | true
TEST - Salón Principal | pedi-04 | station | 1 | true
```
## Actualizar el Seed Data (Opcional)
Si deseas mantener el archivo de seed consistente, actualiza la sección de recursos en `20260115235900_seed_data.sql`:
```sql
-- REEMPLAZAR ESTA SECCIÓN EN EL SEED
-- 2. Crear Resources (solo si no existen)
DO $$
BEGIN
-- Para ANCHOR:23 - Via KLAVA
FOR i IN 1..3 LOOP
IF NOT EXISTS (
SELECT 1 FROM resources r
JOIN locations l ON l.id = r.location_id
WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'mkup-' || LPAD(i::TEXT, 2, '0')
) THEN
INSERT INTO resources (location_id, name, type, capacity, is_active)
SELECT id, 'mkup-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
END IF;
END LOOP;
INSERT INTO resources (location_id, name, type, capacity, is_active)
SELECT id, 'lshs-01', 'station', 1, true
FROM locations l
WHERE l.name = 'ANCHOR:23 - Via KLAVA'
AND NOT EXISTS (
SELECT 1 FROM resources r
WHERE r.location_id = l.id AND r.name = 'lshs-01'
);
FOR i IN 1..4 LOOP
IF NOT EXISTS (
SELECT 1 FROM resources r
JOIN locations l ON l.id = r.location_id
WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'pedi-' || LPAD(i::TEXT, 2, '0')
) THEN
INSERT INTO resources (location_id, name, type, capacity, is_active)
SELECT id, 'pedi-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
END IF;
END LOOP;
FOR i IN 1..4 LOOP
IF NOT EXISTS (
SELECT 1 FROM resources r
JOIN locations l ON l.id = r.location_id
WHERE l.name = 'ANCHOR:23 - Via KLAVA' AND r.name = 'mani-' || LPAD(i::TEXT, 2, '0')
) THEN
INSERT INTO resources (location_id, name, type, capacity, is_active)
SELECT id, 'mani-' || LPAD(i::TEXT, 2, '0'), 'station', 1, true
FROM locations WHERE name = 'ANCHOR:23 - Via KLAVA';
END IF;
END LOOP;
-- Repetir mismo patrón para otras locations...
END $$;
```
## Notas Importantes
### IDs de Resources
Cada location tendrá sus propios recursos con IDs únicos. Por ejemplo:
- ANCHOR:23 - Via KLAVA → `mkup-01` tiene un ID específico
- TEST - Salón Principal → `mkup-01` tiene un ID diferente
### Agregar Nuevas Locations
Cuando agregues una nueva location, la migración de actualización de recursos (`20260116010000_update_resources.sql`) creará automáticamente los 12 recursos para ella:
- 3 mkup
- 1 lshs
- 4 pedi
- 4 mani
### Modificar Cantidades
Si necesitas cambiar las cantidades en el futuro, modifica la migración:
```sql
-- Ejemplo: cambiar a 5 estaciones de maquillaje
FOR i IN 1..5 LOOP
INSERT INTO resources ...
END LOOP;
```
## Soporte y Troubleshooting
### Error: "Resources table is empty"
- Ejecuta la migración de actualización de recursos
- Verifica que las locations estén activas
### Error: "Booking references non-existent resource"
- Esto es normal después de la migración
- Los bookings anteriores fueron eliminados por CASCADE DELETE
- Crea nuevos bookings con el sistema actualizado
### Consulta para Ver Locations sin Recursos
```sql
SELECT l.id, l.name
FROM locations l
LEFT JOIN resources r ON r.location_id = l.id
WHERE l.is_active = true
AND r.id IS NULL;
```