Skip to main content

Documentation Index

Fetch the complete documentation index at: https://wiki.vivla.com/llms.txt

Use this file to discover all available pages before exploring further.

Base de datos

La API usa Supabase (PostgreSQL) como base de datos, con Row Level Security (RLS) habilitado en tablas sensibles. Las migraciones se gestionan con archivos SQL en apps/backend/src/database/migrations/.

Tablas principales

Users y autenticación

TablaDescripción
usersCuentas de usuario
user_preferencesPreferencias (tema, notificaciones, privacidad)
teamsEquipos
team_membersMembresía de equipos
Tabla users:
ColumnaTipoDescripción
idUUID (PK)Identificador único
emailVARCHAR(255) UNIQUEEmail
first_nameVARCHAR(100)Nombre
last_nameVARCHAR(100)Apellido
roleVARCHAR(20)Rol: admin, user, moderator
statusVARCHAR(20)Estado: active, inactive, suspended, pending
avatarTEXTURL del avatar
bioTEXTBiografía
phoneVARCHAR(20)Teléfono
timezoneVARCHAR(50)Zona horaria
languageVARCHAR(10)Idioma (default: en)
email_verifiedBOOLEANEmail verificado
two_factor_enabledBOOLEAN2FA habilitado
last_login_atTIMESTAMPÚltimo login
metadataJSONBMetadata adicional (permisos de herramientas, etc.)
auth0_idVARCHAR(255)ID de Auth0
created_atTIMESTAMPFecha de creación
updated_atTIMESTAMPÚltima actualización (trigger automático)

Chat

TablaDescripción
channelsCanales de chat (stream_channel_id, tipo, nombre, usuario principal)
channel_membersMiembros de canales
channel_moderatorsModeradores de canales
message_logsRegistro de mensajes para analytics
bookingsReservas asociadas a canales
booking_snapshotsSnapshots de bookings para sync
ticketsTickets de soporte
shiftsTurnos de agentes
invitationsInvitaciones a canales (con token UUID)
activity_logsLogs de actividad de canales
sync_jobsJobs de sincronización
sync_logsLogs de operaciones de sync

Community

TablaDescripción
propertiesPropiedades (nombre, ubicación, tipo, estado)
roomsEstancias/ambientes de propiedades
locationsDatos de ubicación
itemsÍtems individuales de inventario
inventoryInventario por propiedad
photosFotos de propiedades
cleaning_rulesReglas de limpieza por estancia
cleaning_sessionsSesiones de limpieza realizadas
floor_plansPlanos de planta (imágenes/PDF)
guidesGuías de uso de propiedades
appliance_guidesGuías de electrodomésticos
qr_codesQR codes generados para acceso público
styling_rulesReglas de estilo visual

Surveys

TablaDescripción
survey_typesTipos de encuesta (slug, nombre, scope: home o booking)
surveysVersiones de encuestas con definición JSONB (steps, questions, i18n)
survey_responsesRespuestas de usuarios con estado (in_progress, completed) y answers JSONB
survey_rewardsRewards otorgados por encuesta completada (1 por response)
survey_reward_levelsDefinición de los 5 niveles de reward
survey_recommendationsRecomendaciones toggle (1 por response)
survey_action_plansPlanes de acción generados por consenso (status: pending_reviewapprovedsent)
survey_response_audiosMetadata de audios grabados (URL, duración, transcripción IA — schema preparado)
survey_score_summariesMétricas pre-computadas por propiedad/usuario/tipo (avgs, approval rates). Source: postgresql o firebase
survey_legacy_responsesRespuestas individuales migradas desde Firebase (per-user, per-property). Sync automático via Windmill
survey_insightsInsights generados por IA (Anthropic) por sección/scope. Incluye token tracking y rate limiting
Tabla surveys:
ColumnaTipoDescripción
idUUID (PK)Identificador único
survey_type_idUUID (FK → survey_types)Tipo de encuesta
versionINTEGERNúmero de versión (auto-incrementado)
statusVARCHAREstado: draft, active, archived
definitionJSONBDefinición completa (steps, questions, i18n)
created_atTIMESTAMPFecha de creación
updated_atTIMESTAMPÚltima actualización (trigger automático)
Tabla survey_responses:
ColumnaTipoDescripción
idUUID (PK)Identificador único
survey_idUUID (FK → surveys)Versión de encuesta respondida
respondent_idVARCHARID del usuario que responde
scope_idVARCHARID del scope (home o booking)
statusVARCHAREstado: in_progress, completed
current_stepVARCHARStep actual (para resume)
current_questionVARCHARPregunta actual (para resume)
answersJSONBMapa de respuestas { questionId: Answer }
completed_atTIMESTAMPFecha de completado
created_atTIMESTAMPFecha de creación
updated_atTIMESTAMPÚltima actualización (trigger automático)
Índices y constraints:
  • Partial unique index: máximo 1 versión active por survey_type_id
  • Índices en survey_responses: por survey_id + status, scope_id + survey_id, respondent_id
  • Unique constraint: 1 reward por response, 1 recommendation por response, 1 action plan por survey + scope

Notificaciones e inbox

TablaDescripción
deep_linksDeep links configurados (nombre, patrón, parámetros)
notification_templatesTemplates de notificación (categoría, contenido, deep link)
notificationsNotificaciones enviadas/programadas
notification_recipientsRecipients con estado de entrega individual
automation_configsConfiguración de automatizaciones
inbox_messagesMensajes de bandeja de entrada
push_subscriptionsSuscripciones de push notifications
preferencesPreferencias de notificación por usuario
push_notification_logsHistorial de push notifications
Tabla inbox_messages:
ColumnaTipoDescripción
idUUID (PK)Identificador
recipient_idUUID (FK → users)Usuario destinatario
message_typeVARCHAR(50)Tipo: restock_alert, guide_incomplete, guide_request, chat_unread, chat_booking_create, chat_ticket_*, chat_shift_*, ai_daily_summary, general
titleVARCHAR(255)Título
bodyTEXTContenido
priorityVARCHAR(50)Prioridad: urgent, high, normal, low
property_idUUID (FK → properties)Propiedad relacionada
item_idUUID (FK → items)Ítem relacionado
metadataJSONBDatos adicionales
statusVARCHAR(50)Estado: unread, read, resolved
read_atTIMESTAMPFecha de lectura
resolved_atTIMESTAMPFecha de resolución
resolved_byUUID (FK → users)Usuario que resolvió
notesTEXTNotas adicionales
deleted_atTIMESTAMPSoft delete

Permisos

TablaDescripción
permissionsDefiniciones de permisos
user_permissionsPermisos asignados a usuarios
role_permissionsPermisos basados en roles

Sync (Windmill)

TablaDescripción
chat_sync_jobsJobs de sincronización (status, steps, result, error_message). Tipos: sync_users, sync_properties, sync_deals, sync_bookings, sync_firebase_legacy_responses
chat_sync_logsLogs detallados por job (level, message, context)

AI / Insights

TablaDescripción
survey_insightsInsights generados por IA. Unique: (survey_id, scope_type, scope_id, section). Rate limit: 3/día por combinación
Tabla survey_insights:
ColumnaTipoDescripción
idUUID (PK)Identificador
survey_idUUID (FK → surveys)Encuesta
scope_typeVARCHARglobal, property, user
scope_idVARCHARID del scope (__global__ para global)
sectionVARCHARsummary, trends, recommendations
insights_dataJSONB{ main: string, questions: Record<string, string> }
modelVARCHARModelo IA usado (ej: claude-sonnet-4-20250514)
input_tokensINTEGERTokens de input
output_tokensINTEGERTokens de output
total_responsesINTEGERRespuestas al momento de generación (para invalidación)
daily_generation_countINTEGERGeneraciones hoy (rate limit)
generation_count_dateDATEFecha para reset diario

Integraciones

TablaDescripción
webhooksConfiguraciones de webhooks
integrationsIntegraciones externas (Zendesk, Stream, etc.)
modulesRegistro de módulos del sistema (nombre, slug, activo). Incluye módulo NPS

Row Level Security (RLS)

Las tablas sensibles tienen políticas RLS habilitadas:
  • inbox_messages: Los usuarios solo pueden leer y actualizar sus propios mensajes. Los admin pueden acceder a todos. El service role puede insertar mensajes (para integraciones y notificaciones del sistema).
  • Otras tablas con datos de usuario siguen patrones similares.
El backend usa el service role de Supabase para operaciones del servidor, lo que permite bypasear RLS. Las operaciones directas desde el cliente no están habilitadas.

Migraciones

Las migraciones SQL se encuentran en apps/backend/src/database/migrations/ y se ejecutan en orden numérico. Cada migración crea tablas, índices y políticas RLS necesarias.

Migraciones de Surveys (050-066)

MigraciónDescripción
050_create_surveys_tables.sqlTablas core: survey_types, surveys, survey_responses. Seeds 3 tipos (home-review, stay-review, arrival-review). RLS service_role only.
051_create_survey_rewards_tables.sqlTablas: survey_rewards, survey_reward_levels, survey_recommendations. Seeds 5 niveles de reward.
052_create_survey_action_plans.sqlTabla: survey_action_plans con consensus_data, action_items, cost_distribution.
053_create_survey_response_audios.sqlTabla: survey_response_audios para metadata de audios (schema preparado).
054_seed_home_review.sqlSeed del Home Review v1: 5 steps, 12 preguntas principales, ~24 hijas condicionales, i18n ES+EN.
055_surveys_accepting_and_filled_by.sqlAñade surveys.accepting_responses (boolean) y survey_responses.filled_by (UUID) para tracking de agente.
056_rename_scope_type_home_to_property.sqlRenombra scope_type homeproperty en survey_types.
057_create_survey_score_summaries.sqlCrea survey_score_summaries para métricas pre-computadas (avgs, approval rates) por propiedad/usuario.
058_create_survey_legacy_responses.sqlCrea survey_legacy_responses para respuestas individuales migradas desde Firebase. Tipo onboarding-review.
059_seed_financial_review.sqlSeed tipo financial-review + 42 respuestas CSV legacy (NPS Financiero Q1 2026, escala 1-10).
060_fix_scope_type_home_to_property.sqlFix de migración 056 incompleta en producción.
061_widen_legacy_nps_score.sqlAmplía nps_score de NUMERIC(4,2) a NUMERIC(5,2) para approval rates hasta 999.99.
062_add_home_review_space.sqlAñade rooms.home_review_space (varchar) para tagear espacios en encuestas home-review.
063_add_firebase_legacy_responses_job_type.sqlAñade sync_firebase_legacy_responses al check constraint de chat_sync_jobs.job_type.
064_register_nps_module.sqlRegistra módulo NPS en tabla modules para home screen.
065_create_survey_insights.sqlCrea survey_insights para insights generados por IA con token tracking.
066_add_insight_rate_limit_columns.sqlAñade daily_generation_count y generation_count_date para rate limiting de IA (3/día).