fix(empresas): no indexar razones sociales ambiguas en build_canon_index
El catálogo guarda como razón social (tipo 'ssbt') etiquetas genéricas que se repiten en muchas empresas: 'NO OPERATIVA' aparece en 117, 'PATRIMONIAL' en 30, 'SERVICIOS' en 14, 'CORPORATIVO' en 3. build_canon_index las indexaba con criterio "la primera fila gana", sin orden estable, así que resolvían a una empresa ARBITRARIA y silenciosamente incorrecta.
Impacto medido en TI: 'Corporativo' resolvía a "Fundación Grupo Caabsa, A.C." / portafolio FUNDACIÓN — 351 activos (37% del inventario) y 157 tickets (29%) mal atribuidos. Otras eran igual de falsas: 'SERVICIOS' → ALPEASA, 'PROYECTOS' → CONSOLIDADO EL RIO, 'EVENTOS' → MATATENA.
Ahora un nombre que viene SÓLO de razones sociales y vota por >1 empresa no se indexa — misma regla de "inequívoco" que ya aplicaba by_strip. Resuelve a None y cada caller cae en su ruta de "no cruza" ya diseñada (cruzado=False, sin_catalogo=True, "(sin portafolio)"), que es curable con un alias en /admin. Si el nombre además existe como nombre_comercial/alias de un grupo, ese sigue ganando (p. ej. 'EXPO LAHE').
Diff del índice verificado contra el catálogo local: 9 claves eliminadas, 0 agregadas, 0 cambiadas, by_strip idéntico. Las 4 claves ambiguas ENTRE GRUPOS ('CAABSA' → 3 empresas, 'HERAM', 'FUNDACION', 'CAABSA DESARROLLOS') se dejan intactas: cambiarlas sí movería el resultado de otros módulos.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com