Files
FRASA-CAS/api-gateway/scripts/seed-config.js
Consult AS Technology 16cacd5f31 feat(9-mejoras): limpieza leads + admin CRUD + calendario + CRM360 FRASA
1. Leads limpiados (207 eliminados, 18 apartados conservados)
2. Round-robin desactivado (config round_robin_habilitado=false)
3. Admin puede borrar/reasignar/mover leads (DELETE/PATCH/POST)
4. Calendario: fechaCita guardada y pasada correctamente
5. Avisos Monday eliminados (BannerModoLocal, ChipPendienteSync, vinculación)
6. Contactos filtrados por usuario asignado
7. Modal bitácora: notas persisten entre fases
8. Fases oportunidades: Agendo→Afluencia→Cotizar→Aparto
9. Toast de nota eliminado en cambios de status
10. Branding: CRM360 FRASA + logo en todas las apps
11. 7 apps construidas
2026-09-10 07:05:40 +00:00

86 lines
3.0 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* Siembra las tablas ConfiguracionSistema y RolConfiguracion con valores
* iniciales. Idempotente: upsert por clave/rol.
*
* Lee config/acciones.ts (catálogo de acciones) y config/roles.ts (matriz de
* módulos) como fuente de verdad.
*
* Uso: npx tsx scripts/seed-config.js
*/
import path from 'node:path'
import { fileURLToPath } from 'node:url'
import dotenv from 'dotenv'
import { PrismaClient } from '@prisma/client'
import { ACCIONES_POR_ROL_DEFAULT } from '../src/config/acciones.ts'
import { MODULOS } from '../src/config/roles.ts'
const raizApi = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..')
dotenv.config({ path: [path.resolve(raizApi, '.env'), path.resolve(raizApi, '..', '.env')] })
const prisma = new PrismaClient()
// ── ConfiguracionSistema ───────────────────────────────────────────────
const CONFIGS_DEFAULT = [
{ clave: 'modo_local_forzado', valor: 'false' },
{ clave: 'recordatorio_inactividad_dias', valor: '10' },
{ clave: 'recordatorio_cobranza_hora', valor: '09:30' },
{ clave: 'sesion_minutos', valor: '480' },
{ clave: 'auto_logout', valor: 'true' },
{ clave: 'mostrar_precios_lista', valor: 'true' },
{ clave: 'max_upload_mb', valor: '10' },
{ clave: 'round_robin_habilitado', valor: 'false' },
]
// ── RolConfiguracion: módulos por rol (matriz de config/roles.ts) ──────
const MODULOS_VENDEDOR = [
'mi-dia', 'alta-cliente', 'alta-afluencia', 'cotizador', 'mi-tablero', 'contactos', 'chat',
]
const MATRIZ_MODULOS = {
vendedor: MODULOS_VENDEDOR,
administracion_venta: [...MODULOS_VENDEDOR, 'cobranza'],
director_ventas: [...MODULOS_VENDEDOR, 'cobranza', 'tablero-comercial'],
escrituracion: [...MODULOS_VENDEDOR, 'cobranza'],
direccion_general: ['mi-dia', 'tablero-comercial', 'cobranza', 'chat'],
admin: [...MODULOS],
}
async function main() {
console.log('⚙️ Sembrando ConfiguracionSistema...')
for (const { clave, valor } of CONFIGS_DEFAULT) {
await prisma.configuracionSistema.upsert({
where: { clave },
create: { clave, valor },
update: { valor },
})
console.log(` ✓ ${clave} = ${valor}`)
}
console.log('\n⚙️ Sembrando RolConfiguracion...')
for (const [rol, modulos] of Object.entries(MATRIZ_MODULOS)) {
const acciones = ACCIONES_POR_ROL_DEFAULT[rol] ?? ACCIONES_POR_ROL_DEFAULT.vendedor
await prisma.rolConfiguracion.upsert({
where: { rol },
create: {
rol,
modulos: JSON.stringify(modulos),
acciones: JSON.stringify(acciones),
},
update: {
modulos: JSON.stringify(modulos),
acciones: JSON.stringify(acciones),
},
})
console.log(` ✓ ${rol}: ${modulos.length} módulos, acciones: ${Object.keys(acciones).length}`)
}
console.log('\n✅ Seed de configuración completado.')
}
main()
.catch((err) => {
console.error('❌ Error en seed:', err)
process.exit(1)
})
.finally(() => prisma.$disconnect())