feat(juridico/corporativo): boton para conciliar titulares de marcas contra el catalogo
En la vista de import de Marcas (admin-only) se agrega un boton Conciliar titulares que llena los vinculos que quedaron en NULL a partir del texto del campo titular: empresa_ref_id / razon_social_ref_id de los mirrors ref_* y, si tambien estan vacios, los ids naturales de respaldo empresa_id / razon_social_id.
Backend: endpoint POST /juridico/corporativo/marcas/reconciliar-titulares (require_admin, param dry_run default true). Reusa EXACTAMENTE la resolucion del import -_resolve_titular_ids -> match_titular -> _map_surrogate- para una sola fuente de verdad. Si la marca ya trae un id natural ese manda para el mapeo al mirror; si no, se deriva del titular. Idempotente y con COALESCE: solo toca filas con algun vinculo en NULL y nunca pisa un valor presente. dry_run reporta sin escribir -evaluadas, actualizadas, fiscal, empresa_solo, sin_mirror, sin_match + muestras-.
Frontend: reconciliarTitularesMarcas + tipo en corporativo.api.ts; tarjeta Conciliar titulares en la vista de import con patron Previsualizar -> Conciliar y reporte -reusa ResCard-. La pagina ya es admin-only -isAdmin-.
Validado contra db_juridico: 7 marcas con ref NULL -> 5 se llenan -razones bajo la empresa paraguas NO OPERATIVA, razon social precisa-, 2 quedan sin match por diseno -persona fisica + despacho externo espanol-. Probado dry_run y apply con rollback -sin persistir-; tsc limpio.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com