fix(6-mejoras): subcategoría+apartado libre+PDF+coacreditado+docs+dedup

1. Subcategoría en modal descarte (catálogo completo + select)
2. Apartado sin monto mínimo (eliminada validación de 0,000)
3. PDF solo con propuesta elegida (no las 4)
4. Co-acreditado: checkbox 'no tiene' valida sin campos obligatorios
5. Documentos apartado: previsualizar + descargar (endpoint + frontend)
6. Oportunidades: sin duplicados, orden Confirmar→Afluencia→Cotizar→Aparto(verde)→Descartar
This commit is contained in:
2026-09-12 07:09:15 +00:00
parent c8357fe582
commit 852182fabc
12 changed files with 261 additions and 112 deletions

View File

@@ -35,6 +35,7 @@ const generalesValidos: DatosGenerales = {
tipoVivienda: 'PROPIA',
tipoCompra: 'VIVIR_AHI',
actividadOcupacion: 'AGENTE DEL MINISTERIO PUBLICO FEDERAL',
usuarioEnkontrol: '',
}
describe('regex de identificadores', () => {
@@ -128,6 +129,16 @@ describe('coacreditadoSchema', () => {
expect(r.success).toBe(true)
})
it('acepta datos ocultos a medias cuando el toggle está apagado', () => {
const conBasura = {
...base,
tieneCoacreditado: false as const,
generales: { ...base.generales, fecha: '', email: 'no-es-correo', codigoPostal: 'abc' },
}
const r = coacreditadoSchema.safeParse(conBasura)
expect(r.success).toBe(true)
})
it('exige el nombre del co-acreditado cuando el toggle está activo', () => {
const r = coacreditadoSchema.safeParse({ ...base, tieneCoacreditado: true })
expect(r.success).toBe(false)
@@ -141,6 +152,19 @@ describe('coacreditadoSchema', () => {
})
expect(r.success).toBe(true)
})
it('no exige usuarioEnkontrol del co-acreditado (no se captura en el bloque compacto)', () => {
const sinUsuarioEnkontrol = JSON.parse(
JSON.stringify({
...base,
tieneCoacreditado: true,
generales: { ...base.generales, nombreCompleto: 'MARIA LOPEZ PEREZ' },
}),
) as typeof base & { tieneCoacreditado: true }
delete (sinUsuarioEnkontrol.generales as Record<string, unknown>).usuarioEnkontrol
const r = coacreditadoSchema.safeParse(sinUsuarioEnkontrol)
expect(r.success).toBe(true)
})
})
describe('referenciasSchema', () => {