# Flujos PSBio

Este documento describe brevemente los flujos de tratamiento de las operaciones de *Search*, *Enroll*, *Update* y *Delete* en **PSBio**.

## Search

![Flujo de Search en PSBio](https://930600986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-555ebfd124e7cb16b2eac3706b218d4de5f4730a%2Fpsbio1-Search.png?alt=media)

1. Al recibir una solicitud de búsqueda (Search), el PSBio devuelve un estado inicial de *SEARCH\_IN\_PROGRESS*.
2. Se disparan dos flujos en paralelo: la búsqueda local (base local y caché) y la búsqueda remota en los demás PSBios. Si se encuentra el IDN (ya sea en la búsqueda local o en la búsqueda remota), la respuesta será *SEARCH\_MATCH* o *SEARCH\_NOT\_MATCH* dependiendo del resultado del match biométrico 1:1 entre la consulta y el registro existente con el IDN informado. Si el IDN informado no se encuentra (ausente de la base local, del caché local y de los demás PSBios), la respuesta será *SEARCH\_FAILED*.

## Enroll

![Flujo de Enroll en PSBio](https://930600986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-f36f350068d465b30a8153f5ae3321db66000710%2Fpsbio1-Enroll.png?alt=media)

1. Al recibir una solicitud de registro (Enroll), el PSBio devuelve un estado inicial de *ENROLL\_IN\_PROGRESS*.
2. Los datos del registro se buscan en la *Blacklist*. En caso de match biométrico, la transacción se concluye con la denegación del registro y estado *ENROLL\_ANOMALY\_BLACKLIST*.
3. El IDN del registro se consulta en los demás PSBios con una llamada IDN\_Query. Si se encuentra el IDN, la transacción se concluye con la denegación del registro y estado *ENROLL\_FAILED*.
4. Las biometrías se buscan en la base local y en el caché. Si se encuentran, la transacción tendrá respuesta *ENROLL\_ANOMALY* y el PSBio esperará el tratamiento de la excepción para concluir la transacción. En caso de que el match ocurra en el caché, se envía un paquete IDE para actualizar los demás PSBios.
5. Se envía un paquete IDE a los demás PSBios para sincronizar los cachés y el estado se cambia a *ENROLL\_CACHE\_OK*. Cuando se reciben las respuestas VRE, el estado cambia a *ENROLL\_OK* y la transacción se concluye.

## Update

![Flujo de Update en PSBio](https://930600986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-a01b771a84c57edd82dc4cc5f056a1074615e18f%2Fpsbio1-Update.png?alt=media)

1. Al recibir una solicitud de actualización (Update), el PSBio devuelve un estado inicial de *UPDATE\_IN\_PROGRESS*.
2. Los datos del registro se buscan en la *Blacklist*. En caso de match biométrico, la transacción se concluye con la denegación del update y estado *UPDATE\_ANOMALY\_BLACKLIST*.
3. El IDN del registro se consulta en la base y caché locales, y también en los demás PSBios con una llamada IDN\_Query. Si el IDN no se encuentra, la transacción se concluye con la denegación del update y estado *UDPATE\_FAILED*.
4. Se verifica qué PSBio tiene el registro original. Si es otro PSBio, el update se rechaza con estado *UPDATE\_REFUSED*.
5. Si el registro pertenece a este PSBio, la transacción continúa procesándose: se comprueba si hay una excepción pendiente para el registro original. Si la hay, el estado cambia a *UPDATE\_REFUSED*, el update se rechaza y la transacción se concluye.
6. Se realiza la verificación biométrica de los datos biométricos del update con el registro original. Si no hay match, el estado cambia a *UPDATE\_ANOMALY*, y la transacción quedará pendiente hasta que se trate la excepción.
7. Si hay match, se verifica si hay huellas nuevas. Si no las hay, el update se realiza como un *TRUSTED\_ENROLL*, el estado cambia a *UPDATE\_OK* y la transacción se concluye.
8. Si hay huellas nuevas: se buscan en la *blacklist*. Si se encuentran, el update se rechaza con estado *UPDATE\_ANOMALY\_BLACKLIST* y la transacción se concluye.
9. Las huellas nuevas se buscan en la base local y en el caché. Si no se encuentran, o se encuentran con posiciones (índices) intercambiadas del mismo individuo, el update se realiza. Se envía un paquete IDE a los otros PSBios (para actualizar sus cachés). El estado se cambia temporalmente a *CACHE\_OK*, dependiendo de si hay o no PSBios indisponibles. El update se realiza, el estado se cambia a *UPDATE\_OK* y la transacción se concluye.
10. Si las huellas nuevas se encuentran en un individuo distinto, el update no se realiza, el estado se cambia a *UPDATE\_ANOMALY* y la transacción quedará pendiente hasta que se trate la excepción.

## Delete

![Flujo de Delete en PSBio](https://930600986-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FHMy9gZsTdEehR3FxRxgN%2Fuploads%2Fgit-blob-5caaa98ba43cd7e316e87f5849db6416eb3d482e%2Fpsbio1-Delete.png?alt=media)

1. Al recibir una solicitud de eliminación (Delete), el PSBio verifica si el registro original pertenece a este PSBio. Si no, la eliminación se rechaza con estado *DELETE\_NOT\_OK*.
2. Si el registro pertenece a este PSBio, el estado cambia a *DELETE\_PENDING* y se elimina de la base local y del caché local.
3. El PSBio notifica la eliminación a todos los demás PSBios, que deben eliminar el registro del caché y revocar su validez. El PSBio espera la confirmación de recepción de todos los demás PSBios. Tras recibir todas las confirmaciones, cambia el estado a *DELETE\_OK* y finaliza el flujo.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/psbio/es/psbio/fluxos_psbio.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
