-- Modo local (degradado) con sincronización a Monday: -- - LeadCaptura pasa a ser la entidad local del embudo (board/etapa/perfil + -- bandera pendienteSync). -- - Unidad: espejo local del inventario (fallback del cotizador). -- - SyncPendiente: cola FIFO de réplicas a Monday. -- Patrón manual (drift histórico): db execute + migrate resolve. NUNCA migrate dev. -- AlterTable LeadCaptura (SQLite no soporta IF NOT EXISTS en ADD COLUMN; -- columnas verificadas ausentes con PRAGMA table_info antes de escribir esto) ALTER TABLE "LeadCaptura" ADD COLUMN "board" TEXT NOT NULL DEFAULT 'LEADS'; ALTER TABLE "LeadCaptura" ADD COLUMN "etapa" TEXT NOT NULL DEFAULT 'NUEVO'; ALTER TABLE "LeadCaptura" ADD COLUMN "origen" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "desarrollo" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "modelo" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "email" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "motivo" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "submotivo" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "datosJson" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "mondayItemId" TEXT; ALTER TABLE "LeadCaptura" ADD COLUMN "pendienteSync" BOOLEAN NOT NULL DEFAULT false; -- SQLite no admite DEFAULT CURRENT_TIMESTAMP en ADD COLUMN: default constante -- + backfill. Prisma siempre escribe updatedAt al crear/actualizar (@updatedAt). ALTER TABLE "LeadCaptura" ADD COLUMN "updatedAt" DATETIME NOT NULL DEFAULT '2026-09-05 00:00:00'; -- Backfill: rows viejas ya estaban en Monday; su item es leadId UPDATE "LeadCaptura" SET "updatedAt" = CURRENT_TIMESTAMP, "mondayItemId" = "leadId"; -- CreateIndex CREATE INDEX IF NOT EXISTS "LeadCaptura_mondayItemId_idx" ON "LeadCaptura"("mondayItemId"); -- CreateTable Unidad CREATE TABLE IF NOT EXISTS "Unidad" ( "id" TEXT NOT NULL PRIMARY KEY, "codigo" TEXT NOT NULL, "desarrollo" TEXT NOT NULL, "modelo" TEXT NOT NULL DEFAULT '', "manzana" TEXT NOT NULL DEFAULT '', "lote" TEXT NOT NULL DEFAULT '', "supConstruccion" REAL NOT NULL DEFAULT 0, "supExcedente" REAL NOT NULL DEFAULT 0, "supEstacionamiento" REAL NOT NULL DEFAULT 0, "precioLista" REAL NOT NULL DEFAULT 0, "precioAcabados" REAL NOT NULL DEFAULT 0, "status" TEXT NOT NULL DEFAULT 'DISPONIBLE', "etapa" TEXT NOT NULL DEFAULT '', "updatedAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ); -- CreateIndex CREATE UNIQUE INDEX IF NOT EXISTS "Unidad_codigo_key" ON "Unidad"("codigo"); -- CreateIndex CREATE INDEX IF NOT EXISTS "Unidad_desarrollo_idx" ON "Unidad"("desarrollo"); -- CreateIndex CREATE INDEX IF NOT EXISTS "Unidad_status_idx" ON "Unidad"("status"); -- CreateTable SyncPendiente CREATE TABLE IF NOT EXISTS "SyncPendiente" ( "id" TEXT NOT NULL PRIMARY KEY, "tipo" TEXT NOT NULL, "payloadJson" TEXT NOT NULL, "referenciaLocal" TEXT, "estado" TEXT NOT NULL DEFAULT 'PENDIENTE', "intentos" INTEGER NOT NULL DEFAULT 0, "ultimoError" TEXT, "createdAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" DATETIME NOT NULL ); -- CreateIndex CREATE INDEX IF NOT EXISTS "SyncPendiente_estado_createdAt_idx" ON "SyncPendiente"("estado", "createdAt");