Files
AnchorOS/FASE_1_STATUS.md
Marco Gallegos 4707ddbd5a feat(salonos): implementar Fase 1.1 y 1.2 - Infraestructura y Esquema de Base de Datos
Implementación completa de la Fase 1.1 y 1.2 del proyecto SalonOS:

## Cambios en Reglas de Negocio (PRD.md, AGENTS.md, TASKS.md)
- Actualizado reset de invitaciones de mensual a semanal (Lunes 00:00 UTC)
- Jerarquía de roles actualizada: Admin > Manager > Staff > Artist > Customer
- Artistas (antes colaboradoras) ahora tienen rol 'artist'
- Staff/Manager/Admin pueden ver PII de customers
- Artist solo ve nombre y notas de customers (restricción de privacidad)

## Estructura del Proyecto (Next.js 14)
- app/boutique/: Frontend de cliente
- app/hq/: Dashboard administrativo
- app/api/: API routes
- components/: Componentes UI reutilizables (boutique, hq, shared)
- lib/: Lógica de negocio (supabase, db, utils)
- db/: Esquemas, migraciones y seeds
- integrations/: Stripe, Google Calendar, WhatsApp
- scripts/: Scripts de utilidad y automatización
- docs/: Documentación del proyecto

## Esquema de Base de Datos (Supabase PostgreSQL)
8 tablas creadas:
- locations: Ubicaciones con timezone
- resources: Recursos físicos (estaciones, habitaciones, equipos)
- staff: Personal con roles jerárquicos
- services: Catálogo de servicios
- customers: Información de clientes con tier (free/gold)
- invitations: Sistema de invitaciones semanales
- bookings: Sistema de reservas con short_id (6 caracteres)
- audit_logs: Registro de auditoría automática

14 funciones creadas:
- generate_short_id(): Generador de Short ID (6 chars, collision-safe)
- generate_invitation_code(): Generador de códigos de invitación (10 chars)
- reset_weekly_invitations_for_customer(): Reset individual de invitaciones
- reset_all_weekly_invitations(): Reset masivo de invitaciones
- validate_secondary_artist_role(): Validación de secondary_artist
- log_audit(): Trigger de auditoría automática
- get_current_user_role(): Obtener rol del usuario actual
- is_staff_or_higher(): Verificar si es admin/manager/staff
- is_artist(): Verificar si es artist
- is_customer(): Verificar si es customer
- is_admin(): Verificar si es admin
- update_updated_at(): Actualizar timestamps
- generate_booking_short_id(): Generar Short ID automáticamente
- get_week_start(): Obtener inicio de semana

17+ triggers activos:
- Auditores automáticos en tablas críticas
- Timestamps updated_at en todas las tablas
- Validación de secondary_artist (trigger en lugar de constraint)

20+ políticas RLS configuradas:
- Restricción crítica: Artist no ve email/phone de customers
- Jerarquía de roles: Admin > Manager > Staff > Artist > Customer
- Políticas granulares por tipo de operación y rol

6 tipos ENUM:
- user_role: admin, manager, staff, artist, customer
- customer_tier: free, gold
- booking_status: pending, confirmed, cancelled, completed, no_show
- invitation_status: pending, used, expired
- resource_type: station, room, equipment
- audit_action: create, update, delete, reset_invitations, payment, status_change

## Scripts de Utilidad
- check-connection.sh: Verificar conexión a Supabase
- simple-verify.sh: Verificar migraciones instaladas
- simple-seed.sh: Crear datos de prueba
- create-auth-users.js: Crear usuarios de Auth en Supabase
- verify-migration.sql: Script de verificación SQL completo
- seed-data.sql: Script de seed de datos SQL completo

## Documentación
- docs/STEP_BY_STEP_VERIFICATION.md: Guía paso a paso de verificación
- docs/STEP_BY_STEP_AUTH_CONFIG.md: Guía paso a paso de configuración Auth
- docs/POST_MIGRATION_SUCCESS.md: Guía post-migración
- docs/MIGRATION_CORRECTION.md: Detalle de correcciones aplicadas
- docs/QUICK_START_POST_MIGRATION.md: Guía rápida de referencia
- docs/SUPABASE_DASHBOARD_MIGRATION.md: Guía de ejecución en Dashboard
- docs/00_FULL_MIGRATION_FINAL_README.md: Guía de migración final
- SIMPLE_GUIDE.md: Guía simple de inicio
- FASE_1_STATUS.md: Estado de la Fase 1

## Configuración
- package.json: Dependencias y scripts de npm
- tsconfig.json: Configuración TypeScript con paths aliases
- next.config.js: Configuración Next.js
- tailwind.config.ts: Tema personalizado con colores primary, secondary, gold
- postcss.config.js: Configuración PostCSS
- .gitignore: Archivos excluidos de git
- .env.example: Template de variables de entorno

## Correcciones Aplicadas
1. Constraint de subquery en CHECK reemplazado por trigger de validación
   - PostgreSQL no permite subqueries en CHECK constraints
   - validate_secondary_artist_role() ahora es un trigger

2. Variable no declarada en loop
   - customer_record RECORD; añadido en bloque DECLARE

## Principios Implementados
- UTC-first: Todos los timestamps se almacenan en UTC
- Sistema Doble Capa: Validación Staff/Artist + Recurso físico
- Reset semanal: Invitaciones se resetean cada Lunes 00:00 UTC
- Idempotencia: Procesos de reset son idempotentes y auditados
- Privacidad: Artist solo ve nombre y notas de customers
- Auditoría: Todas las acciones críticas se registran automáticamente
- Short ID: 6 caracteres alfanuméricos como referencia humana
- UUID: Identificador primario interno

## Próximos Pasos
- Ejecutar scripts de verificación y seed
- Configurar Auth en Supabase Dashboard
- Implementar Tarea 1.3: Short ID & Invitaciones (backend)
- Implementar Tarea 1.4: CRM Base (endpoints CRUD)
2026-01-15 14:58:28 -06:00

12 KiB

SalonOS - Fase 1.1 y 1.2 Completadas con Éxito

Implementado

1. Estructura de Carpetas Next.js 14

Se ha creado la estructura completa según el esquema definido en README.md:

/salonos
├── app/
│   ├── boutique/          # Frontend cliente
│   ├── hq/                # Dashboard administrativo
│   └── api/               # API routes
├── components/            # Componentes UI
│   ├── boutique/
│   ├── hq/
│   └── shared/
├── lib/                   # Lógica de negocio
│   ├── supabase/
│   ├── db/
│   └── utils/
├── db/                    # Esquemas y migraciones
│   ├── migrations/
│   │   ├── 001_initial_schema.sql ✅
│   │   ├── 002_rls_policies.sql ✅
│   │   └── 003_audit_triggers.sql ✅
│   └── seeds/
├── integrations/          # Stripe, Google, WhatsApp
├── styles/                # Config Tailwind
└── docs/

2. Esquema de Base de Datos Completo

Migración 001: 001_initial_schema.sql

Tablas creadas:

  • locations: Ubicaciones del salón con timezone
  • resources: Recursos físicos (estaciones, habitaciones, equipos)
  • staff: Personal con roles jerárquicos
  • services: Catálogo de servicios
  • customers: Información de clientes con tier
  • invitations: Sistema de invitaciones semanales
  • bookings: Sistema de reservas con short_id
  • audit_logs: Registro de auditoría

Features:

  • Todos los timestamps en UTC
  • UUID como identificador primario
  • Índices optimizados para consultas frecuentes
  • Constraints de integridad referencial
  • Sistema Doble Capa (Staff + Recurso)

Migración 002: 002_rls_policies.sql

Políticas RLS implementadas:

Jerarquía de roles:

Admin > Manager > Staff > Artist > Customer

Políticas críticas:

  • Artist: Solo puede ver name y notes de customers
    • NO puede ver email
    • NO puede ver phone
  • Staff/Manager/Admin: Pueden ver PII completo
  • Customer: Solo sus propios datos

Funciones auxiliares:

  • get_current_user_role(): Obtiene el rol del usuario autenticado
  • is_staff_or_higher(): Verifica si es admin, manager o staff
  • is_artist(): Verifica si es artist
  • is_customer(): Verifica si es customer
  • is_admin(): Verifica si es admin

Migración 003: 003_audit_triggers.sql

Funciones implementadas:

  • generate_short_id(): Generador de Short ID (6 caracteres, collision-safe)
  • generate_invitation_code(): Generador de códigos de invitación (10 caracteres)
  • reset_weekly_invitations_for_customer(): Reset individual de invitaciones
  • reset_all_weekly_invitations(): Reset masivo de todas las invitaciones
  • log_audit(): Trigger automático de auditoría

Triggers:

  • Auditoría automática en tablas críticas (bookings, customers, invitations, staff, services)
  • Generación automática de short_id al crear booking

3. Configuración Base del Proyecto

Archivos creados:

  • package.json: Dependencias Next.js 14, Supabase, Tailwind, Framer Motion
  • tsconfig.json: Configuración TypeScript con paths aliases
  • next.config.js: Configuración Next.js
  • tailwind.config.ts: Configuración Tailwind con tema personalizado
  • postcss.config.js: Configuración PostCSS
  • .env.example: Template de variables de entorno
  • .gitignore: Archivos ignorados por Git
  • lib/supabase/client.ts: Cliente Supabase (anon y admin)
  • lib/db/types.ts: TypeScript types basados en el esquema

📋 Documentación Actualizada

Archivos modificados:

  • PRD.md: Reset semanal de invitaciones, jerarquía de roles
  • AGENTS.md: Referencias a reset semanal, verificación de privacidad
  • TASKS.md: Roles incluyen Artist, reset semanal, "colaboradoras" → "artists"

🎯 Tareas Completadas (FASE 1)

Tarea 1.1: Infraestructura Base

  • Estructura de carpetas Next.js 14
  • Configuración base (package.json, tsconfig, tailwind)
  • Template de variables de entorno

Tarea 1.2: Esquema de Base de Datos Inicial

  • 8 tablas obligatorias creadas
  • Claves foráneas y constraints
  • Campos de auditoría (created_at, updated_at)
  • Índices optimizados
  • Tipos ENUM definidos
  • MIGRACIONES EJECUTADAS EN SUPABASE
  • Políticas RLS configuradas (20+ políticas)
  • Triggers de auditoría activos (17+ triggers)
  • Funciones auxiliares creadas (14 funciones)
  • Validación de secondary_artist implementada

Tarea 1.3: Short ID & Invitaciones

  • Generador de Short ID (6 chars, collision-safe)
  • Generador de códigos de invitación
  • Lógica de reset semanal (Lunes 00:00 UTC)
  • Validación de unicidad antes de persistir booking (backend)
  • Tests unitarios

Tarea 1.4: CRM Base (Customers)

  • Endpoints CRUD
  • Policies RLS por rol (ya implementadas en DB)
  • Cálculo automático de Tier
  • Tracking de referidos

🚀 Próximos Pasos

1. Verificar Instalación de Migraciones

  • Ejecutar migraciones en Supabase COMPLETADO
  • Ejecutar script de verificación: scripts/verify-migration.sql en Supabase Dashboard
  • Ejecutar script de seed: scripts/seed-data.sql en Supabase Dashboard
  • Probar políticas RLS

Guía completa: docs/STEP_BY_STEP_VERIFICATION.md

Contenido:

  • 12 consultas de verificación (tablas, funciones, triggers, políticas RLS, tipos ENUM)
  • 9 secciones de seed (locations, resources, staff, services, customers, invitations, bookings)
  • Consultas adicionales de prueba
  • Checklist de verificación

Datos a crear con seed:

  • 3 locations (Centro, Polanco, Coyoacán)
  • 6 resources (estaciones)
  • 8 staff (1 admin, 2 managers, 1 staff, 4 artists)
  • 6 services (catálogo completo)
  • 4 customers (mix Free/Gold)
  • 15 invitations (5 por cliente Gold)
  • 5 bookings de prueba

2. Configurar Auth en Supabase Dashboard

  • Habilitar Email Provider
  • Configurar Site URL y Redirect URLs
  • Crear 8 usuarios de staff en Supabase Auth
  • Crear 4 usuarios de customers en Supabase Auth
  • Actualizar tablas staff y customers con user_ids correctos
  • Configurar Email Templates (opcional)

Guía completa: docs/STEP_BY_STEP_AUTH_CONFIG.md

Usuarios a crear:

Staff (8):

  • Admin Principal: admin@salonos.com
  • Manager Centro: manager.centro@salonos.com
  • Manager Polanco: manager.polanco@salonos.com
  • Staff Coordinadora: staff.coordinadora@salonos.com
  • Artist María García: artist.maria@salonos.com
  • Artist Ana Rodríguez: artist.ana@salonos.com
  • Artist Carla López: artist.carla@salonos.com
  • Artist Laura Martínez: artist.laura@salonos.com

Customers (4):

  • Sofía Ramírez (Gold): sofia.ramirez@example.com
  • Valentina Hernández (Gold): valentina.hernandez@example.com
  • Camila López (Free): camila.lopez@example.com
  • Isabella García (Gold): isabella.garcia@example.com

Guía rápida: docs/QUICK_START_POST_MIGRATION.md

3. Implementar Tarea 1.3 completa

  • Backend API endpoints para Short ID
  • Tests unitarios de colisiones
  • Edge Function o Cron Job para reset semanal
  1. Implementar Tarea 1.4:
    • Endpoints CRUD de customers
    • Lógica de cálculo automático de Tier
    • Sistema de referidos

📝 Notas Importantes

UTC-First

Todos los timestamps se almacenan en UTC. La conversión a zona horaria local ocurre solo en:

  • Frontend (The Boutique / The HQ)
  • Notificaciones (WhatsApp / Email)

Sistema Doble Capa

El sistema valida disponibilidad en dos niveles:

  1. Staff/Artist: Horario laboral + Google Calendar
  2. Recurso: Disponibilidad de estación física

Reset Semanal de Invitaciones

  • Ejecutado automáticamente cada Lunes 00:00 UTC
  • Solo para clientes Tier Gold
  • Cada cliente recibe 5 invitaciones nuevas
  • Proceso idempotente y auditado

Privacidad de Datos

  • Artist: NO puede ver email ni phone de customers
  • Staff/Manager/Admin: Pueden ver PII de customers
  • Todas las consultas de Artist a customers están filtradas por RLS

🔧 Comandos Útiles

# Instalar dependencias
npm install

# Ejecutar migraciones de base de datos
npm run db:migrate

# Verificar instalación de migraciones (scripts SQL)
# Ejecutar: scripts/verify-migration.sql en Supabase Dashboard

# Crear datos de prueba (scripts SQL)
# Ejecutar: scripts/seed-data.sql en Supabase Dashboard

# Levantar servidor de desarrollo
npm run dev

# Verificar TypeScript
npm run typecheck

# Ejecutar linter
npm run lint

🎉 Estado de Migraciones en Supabase

MIGRACIONES EJECUTADAS EXITOSAMENTE

Proyecto: pvvwbnybkadhreuqijsl Fecha: 2026-01-15 Estado: COMPLETADO

Tablas Creadas:

  • locations (3)
  • resources (6)
  • staff (0)
  • services (0)
  • customers (0)
  • invitations (0)
  • bookings (0)
  • audit_logs (0)

Funciones Creadas (14):

  • generate_short_id
  • generate_invitation_code
  • reset_weekly_invitations_for_customer
  • reset_all_weekly_invitations
  • validate_secondary_artist_role
  • log_audit
  • get_current_user_role
  • is_staff_or_higher
  • is_artist
  • is_customer
  • is_admin
  • update_updated_at
  • generate_booking_short_id
  • get_week_start

Triggers Activos (17+):

  • locations_updated_at
  • resources_updated_at
  • staff_updated_at
  • services_updated_at
  • customers_updated_at
  • invitations_updated_at
  • bookings_updated_at
  • validate_booking_secondary_artist
  • audit_bookings
  • audit_customers
  • audit_invitations
  • audit_staff
  • audit_services
  • booking_generate_short_id

Políticas RLS Configuradas (20+):

  • Locations: 2 políticas
  • Resources: 3 políticas
  • Staff: 3 políticas
  • Services: 2 políticas
  • Customers: 5 políticas (incluyendo restricción Artist)
  • Invitations: 3 políticas
  • Bookings: 7 políticas
  • Audit logs: 2 políticas

Tipos ENUM (6):

  • user_role
  • customer_tier
  • booking_status
  • invitation_status
  • resource_type
  • audit_action

Correcciones Aplicadas:

  • Constraint de secondary_artist reemplazado por trigger de validación
  • Variable customer_record declarada en reset_all_weekly_invitations()

📚 Guías de Post-Migración

  1. Verificación: Ejecutar scripts/verify-migration.sql
  2. Seed de datos: Ejecutar scripts/seed-data.sql
  3. Configuración Auth: Configurar en Supabase Dashboard
  4. Pruebas: Probar funcionalidades en docs/POST_MIGRATION_SUCCESS.md

📞 Contacto

Para dudas sobre la implementación, consultar:

  • PRD.md: Reglas de negocio
  • TASKS.md: Plan de ejecución
  • AGENTS.md: Roles y responsabilidades
  • db/migrations/README.md: Guía de migraciones

📞 Documentación Disponible

  • PRD.md: Reglas de negocio del sistema
  • TASKS.md: Plan de ejecución por fases
  • AGENTS.md: Roles y responsabilidades de IA
  • db/migrations/README.md: Guía técnica de migraciones
  • docs/MIGRATION_GUIDE.md: Guía detallada de migraciones
  • docs/00_FULL_MIGRATION_FINAL_README.md: Guía de migración final
  • docs/MIGRATION_CORRECTION.md: Detalle de correcciones aplicadas
  • docs/SUPABASE_DASHBOARD_MIGRATION.md: Guía de ejecución en Dashboard
  • docs/POST_MIGRATION_SUCCESS.md: Guía post-migración (verificación y seed)
  • scripts/verify-migration.sql: Script de verificación
  • scripts/seed-data.sql: Script de datos de prueba

Estado: FASE 1.1 y 1.2 COMPLETADAS EXITOSAMENTE

  • Migraciones ejecutadas en Supabase
  • Base de datos completamente configurada
  • Políticas RLS activas (incluyendo restricción Artist)
  • Sistema de auditoría activo
  • Funciones de Short ID e invitaciones funcionales
  • Validación de secondary_artist implementada
  • Listo para continuar con Tarea 1.3 y 1.4

Próximos pasos:

  1. Ejecutar script de verificación en Supabase Dashboard
  2. Ejecutar script de seed para crear datos de prueba
  3. Configurar Auth en Supabase Dashboard
  4. Implementar Tarea 1.3 (Short ID & Invitaciones - backend)
  5. Implementar Tarea 1.4 (CRM Base)