Skip to main content

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

Usa duplicates: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

Filtros:
  • status: pending, merged, dismissed o all
  • confidence: high, medium, low o all
  • query: busca por ID de revisión, ID de persona, nombre o cédula
Los filtros 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

El detalle reemplaza 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

Envía solo las personas que deben unificarse. El sistema conserva la mejor información y mueve fuentes, pistas y reportes al perfil principal. El cuerpo rechaza campos desconocidos y requiere al menos dos IDs distintos que pertenezcan a la revisión. Un arreglo con menos de dos elementos responde 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

No requiere cuerpo. Descartar no modifica personas; solo cierra una revisión 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.