Duplicados
Los duplicados usan el mismo flujo del panel administrativo: la API lista revisiones, expande una revisión individual y permite unificar solo los registros seleccionados o descartar la revisión.Permisos
Usaduplicates:read para listar y leer revisiones.
Usa duplicates:write para unificar o descartar revisiones. Si cualquier
persona de la revision es menor de edad o tiene condiciones/notas de salud,
tambien se requiere persons:sensitive:read. Estos endpoints no limitan las
revisiones a la fuente de la llave.
Las escrituras comprueban el permiso sensible antes de ocultar revisiones con
personas privadas: una revision privada y sensible puede responder 403 sin
ese permiso, y 404 con él.
Listar revisiones
status:pending,merged,dismissedoallconfidence:high,medium,lowoallquery: busca por ID de revisión, ID de persona, nombre o cédula
status y confidence usan all por defecto; los valores no
reconocidos también se interpretan como all. Para trabajar solo con revisiones
abiertas, envía status=pending.
La lista es liviana y devuelve person_ids, no expande personas. Puede incluir
una revisión cuyo detalle no sea accesible porque contiene una persona privada.
Cada revisión incluye match_score (número o null): la similitud mínima de
Jaro-Winkler (0–1) entre los nombres normalizados y con tokens ordenados de
los miembros del grupo. Solo está presente en revisiones creadas por el
escaneo de coincidencias difusas; es null para coincidencias exactas de
clave, para registros previos al escaneo y para los marcados durante la
ingesta.
Las coincidencias difusas también deben superar guardas estructurales de
identidad: nombres individuales en ambos lados, género conocido compatible,
estado compatible y una coincidencia plausible entre nombre y apellido, incluso
cuando el orden está invertido.
También incluye scan_version (entero o null): la generación del algoritmo
de escaneo de duplicados que escribió el registro (actualmente 2). Es null
para registros escritos antes de versionar el escaneo o marcados durante la
ingesta.
Ver una revisión
person_ids por persons, con los objetos completos de
persona necesarios para revisar el caso, minimizados salvo que la llave tenga
persons:sensitive:read. Si alguna persona es privada, el detalle responde
404. También incluye match_score y
scan_version, con el mismo significado que en la lista.
Unificar
422.
Si contiene varios elementos pero menos de dos IDs distintos, un ID ajeno a la
revisión o una persona canónica inactiva, responde 404.
Solo se puede unificar una revisión pending. Una revisión ya cerrada responde
404 tras las comprobaciones de acceso y validación del cuerpo. Una unificación
correcta responde 200 con { "data": { ...revision } }, incluyendo persons.
canonical_person_id es opcional: indica cuál persona se conserva como perfil
principal y debe ser uno de los person_ids (si no, responde 422). Si se omite,
el sistema elige automáticamente el registro más completo.
La persona canónica debe estar activa. Al unificar, todos los registros eliminados
que apuntaban a un candidato se reapuntan directamente a la persona canónica para
evitar cadenas de fusiones. Restaurar una persona elimina su asociación de fusión
anterior.
national_id es opcional. Si se provee, reemplaza la cédula que el sistema elegiría automáticamente entre los candidatos.
birth_date es opcional y usa el formato YYYY-MM-DD. El sistema conserva
automáticamente una única fecha conocida. Si las personas seleccionadas tienen
fechas diferentes, el campo es obligatorio y debe coincidir con una de ellas.
Las unificaciones automáticas con fechas en conflicto quedan pendientes para
revisión manual.
first_name y last_name son opcionales y deben enviarse juntos o ninguno. Si se
proveen, reemplazan el nombre que el sistema elegiría automáticamente — útil cuando
los registros tienen el nombre desordenado o con variantes ortográficas. Si se omiten,
el sistema elige el nombre del registro más completo.
location es opcional. Si se provee, reemplaza la ubicación que el sistema
construiría automáticamente combinando los valores de los candidatos.
last_seen_location no se admite; los campos desconocidos responden 422.
found_notes es opcional. Si se provee, reemplaza las notas que el sistema
construiría automáticamente combinando los valores de los candidatos.
description es opcional y acepta null. Si se provee, reemplaza la descripción
que el sistema construiría automáticamente (incluyendo el bloque de “Otros reportes
asociados”). Pasa null para dejar el campo vacío en el perfil unificado.
Descartar
pending. Si ya está cerrada, responde 404 tras las comprobaciones de acceso.
Una operación correcta responde 200 con { "data": { ...revision } },
incluyendo persons.
Una respuesta 500 puede ocurrir después de guardar una unificación o un
descarte. Consulta la revisión antes de reintentar.
