feat(afluencia): el campo de interes muestra los modelos del desarrollo

'Al departamento o casa de interes' ahora es un select dependiente:
al elegir desarrollo se cargan sus modelos (MODELOS_POR_PROYECTO) y al
cambiar de desarrollo se resetea. En Monday la columna 'Tipo de
Propiedad' se renombro a 'Modelo de Interes' con los 16 modelos como
labels del status.
This commit is contained in:
2026-09-02 01:48:45 +00:00
parent 52667df041
commit 57029bdd3d
7 changed files with 49 additions and 25 deletions

View File

@@ -105,7 +105,7 @@ describe('crearLead (POST /api/leads)', () => {
const monday = mondayMock()
const r = await crearLead(monday, {
...datosBase,
tipoPropiedad: 'Casa',
modelo: 'HIMALAYA',
medioContacto: 'WhatsApp',
edad: 35,
estadoCivil: 'Casado(a)',
@@ -119,7 +119,7 @@ describe('crearLead (POST /api/leads)', () => {
})
expect(r).toEqual({ id: 'lead-nuevo-1', oportunidadId: null })
expect(monday.leadsCreados[0]).toMatchObject({
tipoPropiedadLabel: 'Casa',
modeloLabel: 'HIMALAYA',
medioContacto: 'WhatsApp',
edad: 35,
estadoCivilLabel: 'Casado(a)',

View File

@@ -24,7 +24,7 @@ const crearLeadSchema = z.object({
notas: z.string().trim().min(1).optional(),
// Campos de calificación de la afluencia (opcionales; los labels fijos del
// front coinciden con los sembrados en Monday, no se validan contra el board)
tipoPropiedad: z.string().trim().min(1).optional(),
modelo: z.string().trim().min(1).optional(),
medioContacto: z.string().trim().min(1).optional(),
edad: z.coerce.number().int().min(15).max(120).optional(),
estadoCivil: z.string().trim().min(1).optional(),
@@ -125,7 +125,7 @@ export async function crearLead(
origenLabel: datos.origen,
desarrolloLabel: datos.desarrollo,
notas: datos.notas,
tipoPropiedadLabel: datos.tipoPropiedad,
modeloLabel: datos.modelo,
medioContacto: datos.medioContacto,
edad: datos.edad,
estadoCivilLabel: datos.estadoCivil,