- Columna Etapa en Monday Unidades (10 labels oficiales), 155 unidades pobladas - sync-etapas.ts idempotente (--archivo/--dry-run/--semilla) con traspasos Vendido→Escrituración y Escriturado→SAC como actividades (sin retroactivas) - API: etapa en unidades + porEtapa en /api/reportes/resumen - Dashboard: gráfica pipeline por etapa + KPI en notaría; cotizador muestra etapa - 28 cambios aplicados desde Reporte_EstatusVenta (8 avances, 20 nuevas); contradicciones retenidas para revisión humana (documentadas) - Tests: api 168, dashboards 9, cotizador 71
47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import { ETAPAS_PIPELINE, normalizarEtapa, rangoEtapa, TRASPASOS } from './etapas.js'
|
|
|
|
describe('normalizarEtapa', () => {
|
|
it('mapea las etiquetas del maestro ERP a los labels oficiales', () => {
|
|
expect(normalizarEtapa('APARTADO')).toBe('Apartado')
|
|
expect(normalizarEtapa('RESERVADO')).toBe('Reserva')
|
|
expect(normalizarEtapa('VENDIDO')).toBe('Vendido')
|
|
expect(normalizarEtapa('INTEGRACION')).toBe('Integración')
|
|
expect(normalizarEtapa('EN ANALISIS')).toBe('En Análisis')
|
|
expect(normalizarEtapa('AUTORIZADO')).toBe('Autorizado')
|
|
expect(normalizarEtapa('NOTARIA')).toBe('Notaría')
|
|
expect(normalizarEtapa('ESCRITURADO')).toBe('Escriturado')
|
|
expect(normalizarEtapa('ENTREGA')).toBe('Entrega')
|
|
expect(normalizarEtapa('POSTVENTA')).toBe('PostVenta')
|
|
})
|
|
|
|
it('acepta los labels oficiales tal cual (idempotente)', () => {
|
|
for (const etapa of ETAPAS_PIPELINE) {
|
|
expect(normalizarEtapa(etapa)).toBe(etapa)
|
|
}
|
|
})
|
|
|
|
it('devuelve null para vacío, DISPONIBLE o desconocidos', () => {
|
|
expect(normalizarEtapa('')).toBeNull()
|
|
expect(normalizarEtapa(null)).toBeNull()
|
|
expect(normalizarEtapa(undefined)).toBeNull()
|
|
expect(normalizarEtapa('DISPONIBLE')).toBeNull()
|
|
expect(normalizarEtapa('OTRA COSA')).toBeNull()
|
|
})
|
|
})
|
|
|
|
describe('rangoEtapa / TRASPASOS', () => {
|
|
it('el rango sigue el orden oficial 1..10', () => {
|
|
expect(rangoEtapa('Apartado')).toBe(1)
|
|
expect(rangoEtapa('Vendido')).toBe(3)
|
|
expect(rangoEtapa('Escriturado')).toBe(8)
|
|
expect(rangoEtapa('PostVenta')).toBe(10)
|
|
})
|
|
|
|
it('solo Vendido y Escriturado disparan traspaso de departamento', () => {
|
|
expect(TRASPASOS['Vendido']).toBe('Escrituración')
|
|
expect(TRASPASOS['Escriturado']).toBe('SAC')
|
|
expect(Object.keys(TRASPASOS)).toHaveLength(2)
|
|
})
|
|
})
|