# Bases de Datos Relacionales GBDS

## Introducción

Este manual describe todas las tablas, esquemas e informaciones de las bases de datos relacionales de GBDS 4.x. GBDS utiliza una base de datos relacional para almacenar metadatos sobre personas, transacciones, grupos de notificación, sustituciones de configuraciones y excepciones.

El documento está dividido en cuatro secciones que describen:

* Las tablas generales;
* Las tablas de Latentes No Resueltas (UL);
* Las tablas de Notificación;
* Las tablas de configuraciones del GBDS.

## Tablas generales <a href="#general-tables" id="general-tables"></a>

Las tablas generales son tablas que almacenan información vital para la operación del GBDS, como excepciones, información sobre personas, información sobre transacciones y otras. Estas tablas se describen a continuación.

### gbds.people

La `people`la tabla está destinada a almacenar los índices de todas las personas almacenadas en la base de datos GBDS y se describe de la siguiente manera:

<table><thead><tr><th width="100">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria;<br><br>Clave privada de la base de datos relacional</td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>not null</td><td>UGUID personal almacenado en HBase</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>null</td><td>Indica si el candidato fue eliminado, para que no sea incluido cuando se realicen operaciones de listado</td></tr></tbody></table>

### gbds.people\_version

La `people_version`la tabla está destinada a almacenar la información sobre los últimos cambios en el registro de una persona y se describe de la siguiente manera:

<table><thead><tr><th width="100">Columna</th><th width="100">Tipo</th><th width="116.6666259765625">Tamaño</th><th width="100">Valor</th><th>Información adicional</th></tr></thead><tbody><tr><td>version</td><td>int</td><td>11</td><td>not null</td><td>Clave primaria; Índice de versión (incremental a partir del primer cambio)</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Referencia a la persona<code>gbds.people.id</code></td></tr><tr><td>_timestamp</td><td>datetime</td><td>6</td><td>null</td><td>sello de fecha y hora para la versión actual de una persona</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>null</td><td>Indica si el candidato fue excluido para ejecutarse al realizar operaciones de listado de candidatos</td></tr><tr><td>active</td><td>tinyint</td><td>1</td><td>null</td><td>Define si una versión de una persona es elegible para transacciones de registro maestro</td></tr></tbody></table>

### gbds.transactions\_ref

La `transactions`la tabla está destinada a almacenar los índices de todas las transacciones almacenadas en la base de datos GBDS y se describe de la siguiente manera:

<table><thead><tr><th width="100">Columna</th><th width="100">TIpo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>tguid</td><td>varchar</td><td>255</td><td>not null</td><td><p>UGUID de la transacción almacenada en HBase</p><h4 id="gbds.transactions"><br></h4></td></tr></tbody></table>

### gbds.transactions

La `transactions`la tabla está destinada a almacenar información sobre el análisis de calidad de los datos biométricos de una transacción.

<table><thead><tr><th width="200">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>tguid</td><td>varchar</td><td>255</td><td>not null</td><td>Referencia a la transacción<code>transactions_ref.tguid</code></td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>null</td><td>UGUID de la persona almacenada en HBase</td></tr><tr><td>active</td><td>tinyint</td><td>1</td><td>not null</td><td>Define si una versión de una persona es elegible para transacciones del Registro Maestro</td></tr><tr><td>finger_quality_extracted</td><td>tinyint</td><td>1</td><td>null</td><td>Falso si las huellas dactilares pueden ser extraídas</td></tr><tr><td>face_quality_extracted</td><td>tinyint</td><td>1</td><td>null</td><td>Falso si el rostro puede ser extraído en segundo plano. Verdadero si ya ha sido extraído.</td></tr><tr><td>created</td><td>datetime</td><td>6</td><td>null</td><td>sello de fecha y hora de creación de la transacción</td></tr><tr><td>updated</td><td>datetime</td><td>6</td><td>null</td><td>sello de fecha y hora de la última modificación de la transacción</td></tr><tr><td>enroll_status</td><td>varchar</td><td>255</td><td>null</td><td>Estado de inscripción (como <code>ENQUEUED</code>, <code>PROCESSING</code>, <code>FAILED</code>, y otros)</td></tr><tr><td>quality_status</td><td>varchar</td><td>255</td><td>null</td><td>Estado del análisis de calidad (como <code>OK</code>, <code>PENDING</code>, <code>APPROVED</code>, y otros)</td></tr><tr><td>extraction_time</td><td>varchar</td><td>255</td><td>null</td><td>Tiempo transcurrido para extracciones de modelos</td></tr><tr><td>extraction_quality</td><td>varchar</td><td>255</td><td>null</td><td>Tiempo transcurrido para extracciones de calidad</td></tr><tr><td>match_time</td><td>int</td><td>11</td><td>null</td><td>Tiempo de emparejamiento transcurrido para esta transacción</td></tr><tr><td>total_time</td><td>int</td><td>11</td><td>null</td><td>Operación total menos tiempo de espera en la cola</td></tr><tr><td>type</td><td>varchar</td><td>20</td><td>null</td><td>Tipo de transacción. Enum: <code>ENROLL</code>, <code>UPDATE</code>, <code>VERIFY</code>,<code>IDENTIFY</code></td></tr><tr><td>fingerprint_global_quality</td><td>int</td><td>11</td><td>null</td><td>Puntuación de calidad global de huella dactilar</td></tr><tr><td>global_quality</td><td>int</td><td>11</td><td>null</td><td>Puntuación de calidad global del perfil</td></tr><tr><td>quality_extraction_api_id</td><td>varchar</td><td>255</td><td>null</td><td>ID de la API que realizará o realizó la extracción de calidad</td></tr><tr><td>latent</td><td>tinyint</td><td>1</td><td>null</td><td>Indica si la transacción es una búsqueda latente</td></tr><tr><td>ul</td><td>tinyint</td><td>1</td><td>null</td><td>Indica si la transacción es una búsqueda UL</td></tr><tr><td>api_id</td><td>varchar</td><td>255</td><td>null</td><td>El ID de la instancia de la API que recibió la transacción</td></tr><tr><td>num_fingers</td><td>int</td><td>11</td><td>null</td><td>El número de huellas dactilares en la transacción</td></tr><tr><td>num_faces</td><td>int</td><td>11</td><td>null</td><td>El número de imágenes de rostro en la transacción (0 o 1)</td></tr><tr><td>gbds_version</td><td>varchar</td><td>255</td><td>not null</td><td>Versión del GBDS que procesó la transacción</td></tr><tr><td>ginger_extractor_type</td><td>enum</td><td>n/a</td><td>null</td><td>Tipo de extractor de ginger utilizado en la transacción. Enum: <code>GRIAULE_FAST</code>, <code>GRIAULE_BASIC</code>, <code>GRIAULE_2020</code>, <code>GRIAULE_2024</code>, <code>GRIAULE_2018</code>.</td></tr></tbody></table>

### gbds.transaction\_fields

La `transaction_fields`la tabla tiene como objetivo almacenar la información sobre la calidad y vincularla a la información no biométrica de `fields`tabla.

<table><thead><tr><th width="120">Columna</th><th width="100">Tipo</th><th width="100"> Tamaño</th><th width="100">Valor</th><th>Información adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>fkey</td><td>varchar</td><td>255</td><td>null</td><td>Clave de campo que describe la información contenida (por ejemplo, si es un tipo sanguíneo, nombre de la madre, fecha de nacimiento, documento, etc.) Referencia a<code>fields.fkey</code></td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Tipo de información (búsqueda o <code>label</code>) Referencia a<code>fields.type</code></td></tr><tr><td>fvalue</td><td>varchar</td><td>255</td><td>null</td><td>Valor efectivo del campo (por ejemplo, el número del documento) Referencia a<code>fields.fvalue</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Id de la transacción. Referencia a<code>transaction.id</code></td></tr></tbody></table>

### gbds.transaction\_fingerprint\_quality

Las columnas de la tabla a continuación son dinámicas, de acuerdo con la extracción de calidad. En caso de que ocurra alguna edición de los campos en versiones futuras, los datos aquí pueden quedar desactualizados por un momento.

| Columna           | Tipo    | Tamaño | Valor    |
| ----------------- | ------- | ------ | -------- |
| transaction\_id   | bigint  | 20     | not null |
| idx               | int     | 11     | not null |
| image\_quality    | int     | 11     | null     |
| template\_quality | int     | 11     | null     |
| minutiae\_count   | int     | 11     | null     |
| blank             | varchar | 100    | null     |
| contrast          | varchar | 100    | null     |
| fingerArea        | varchar | 100    | null     |
| fingerCenterX     | varchar | 100    | null     |
| fingerCenterY     | varchar | 100    | null     |
| fingerExtentX     | varchar | 100    | null     |
| fingerExtentY     | varchar | 100    | null     |
| hasjoint          | varchar | 100    | null     |
| \_\_index         | varchar | 100    | null     |
| marginBiteEast    | varchar | 100    | null     |
| marginBiteNorth   | varchar | 100    | null     |
| marginBiteSouth   | varchar | 100    | null     |
| marginBiteWest    | varchar | 100    | null     |
| nfiq              | varchar | 100    | null     |
| orientation       | varchar | 100    | null     |
| sizeX             | varchar | 100    | null     |
| sizeY             | varchar | 100    | null     |

### gbds.transaction\_face\_quality

Las columnas de la tabla a continuación son dinámicas, de acuerdo con la extracción de calidad. En caso de que ocurra alguna edición de los campos en versiones futuras, los datos aquí pueden quedar desactualizados por un momento.

<table><thead><tr><th width="300">Columna</th><th>Tipo</th><th>Tamaño</th><th>Valor</th></tr></thead><tbody><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td></tr><tr><td>idx</td><td>int</td><td>11</td><td>not null</td></tr><tr><td>image_quality</td><td>int</td><td>11</td><td>null</td></tr><tr><td>template_quality</td><td>int</td><td>11</td><td>null</td></tr><tr><td>autoBrightness</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgBelowPictureQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgBlueStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgDarknessQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgGreenStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgRedStandardDeviation</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>bgUniformityQuality</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>blurCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>busyBackground</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>busyBackgroundInCropped</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>cropContainmentError</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookDown</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookRight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesLookUp</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesTooClosed</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>eyesTooOpen</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceDown</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationPitchCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationRollAngle</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceOrientationYawCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceRight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>faceUp</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>glasses</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>grayscaleSpan</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>hat</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>heavyGlasses</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>icaoCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>leftEyeX</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>leftEyeY</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>mouthObstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>mouthOpen</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>obstruction</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>openMouth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pictureHeight</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pictureWidth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>pixelated</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>redEye</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>result</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>rightEyeX</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>rightEyeY</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturated</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationGrayscaleDistribGrade</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationNumGrayTones</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>saturationOverExposure</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>shadows</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>skinColorCompliance</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>smile</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>smilingMouth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>spoof</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>spoofGrade</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>tiltAngle</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>tooDark</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>unnaturalSkinColor</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>visibleTeeth</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongFacePose</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongShoulderPoseLeft</td><td>varchar</td><td>100</td><td>null</td></tr><tr><td>wrongShoulderPoseRight</td><td>varchar</td><td>100</td><td>null</td></tr></tbody></table>

### gbds.biometrics

La tabla `biometrics`está destinada a almacenar los datos biométricos de una persona, estando vinculada a las tablas `transaction`y al `people_version`sistema. Se describe de la siguiente manera:

<table><thead><tr><th width="120">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>idx</td><td>int</td><td>11</td><td>null</td><td>Índice de la biometría actual</td></tr><tr><td>quality</td><td>int</td><td>11</td><td>null</td><td>Puntuación de calidad para el modelo biométrico extraído</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Modalidad de la biometría actual</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Referencia a la persona<code>gbds.people.id</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Referencia a la transacción<code>transactions_ref.id</code></td></tr><tr><td>person_version</td><td>bigint</td><td>11</td><td>not null</td><td>Referencia a la persona<code>people_version.version</code></td></tr></tbody></table>

### gbds.fields

La tabla `fields`       está destinada a almacenar la información no biométrica de una persona, estando vinculada a las `transaction`tablas `people_version`. Se describe de la siguiente manera:

<table><thead><tr><th width="120">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>fkey</td><td>varchar</td><td>255</td><td>null</td><td>Clave de campo que describe la información contenida (por ejemplo, si es un tipo sanguíneo, nombre de la madre, fecha de nacimiento, documento, etc.)</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Tipo de información (búsqueda o <code>label</code>)</td></tr><tr><td>fvalue</td><td>varchar</td><td>255</td><td>null</td><td>Valor efectivo del campo (por ejemplo, el número del documento)</td></tr><tr><td>person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Referencia a la persona<code>person.id</code></td></tr><tr><td>person_version</td><td>int</td><td>11</td><td>not null</td><td>Referencia a la persona<code>people_version.version</code></td></tr></tbody></table>

### gbds.exceptions

La tabla `exceptions`está destinada a almacenar la información de cualquier excepción biométrica y su tratamiento. Se describe a continuación:

<table><thead><tr><th width="185">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Clave privada de la base de datos relacional</td></tr><tr><td>aguid</td><td>varchar</td><td>255</td><td>not null</td><td>Excepción almacenada UGUID de HBase</td></tr><tr><td>comments</td><td>varchar</td><td>255</td><td>null</td><td>Cualquier comentario proporcionado al tratar la excepción</td></tr><tr><td>_timestamp</td><td>datetime</td><td>6</td><td>null</td><td>sello de fecha y hora para la creación de la excepción</td></tr><tr><td>estado</td><td>varchar</td><td>255</td><td>not null</td><td>El estado actual de la excepción define si está tratada o pendiente</td></tr><tr><td>user</td><td>varchar</td><td>255</td><td>null</td><td>Identificación del usuario responsable del tratamiento de la excepción</td></tr><tr><td>reference_person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave foránea: Referencia a la persona de referencia<code>people.id</code></td></tr><tr><td>entrant_person_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave foránea: Referencia a la persona que entra<code>people.id</code></td></tr><tr><td>transaction_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave foránea: Referencia a la transacción<code>transactions_ref.id</code></td></tr><tr><td>reference_person_version</td><td>int</td><td>11</td><td>not null</td><td>Clave foránea: Referencia a la persona de referencia<code>people_version.version</code></td></tr><tr><td>entrant_person_version</td><td>int</td><td>11</td><td>not null</td><td>Clave foránea: Referencia a la persona que entra<code>people_version.version</code></td></tr></tbody></table>

### gbds.apis

El `apis`es usado por GBDS para gestionar varias APIs activas al mismo tiempo.

<table><thead><tr><th width="100">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>api-id</td><td>varchar</td><td>255</td><td>not null</td><td>ID de la instancia de API única</td></tr><tr><td>nombre de host</td><td>varchar</td><td>255</td><td>not null</td><td>Nombre del host del nodo donde la API se está ejecutando</td></tr><tr><td>port</td><td>int</td><td>11</td><td>not null</td><td>Puerto donde la API se está ejecutando</td></tr><tr><td>type</td><td>varchar</td><td>255</td><td>null</td><td>Tipo de instancia de la API (LEADER, RUNNER o nulo)</td></tr></tbody></table>

Al iniciarse la API, cada API se buscará a sí misma en esta tabla. Si no se encuentra por nombre de host/IP y puerto, se inserta en la tabla con un GUID como *api-id* y *tipo nulo* , lo que significa que no está lista para la extracción de calidad. Los cambios aplicados directamente a esta tabla se analizarán cada 15 minutos.

## Tablas latentes no resueltas (UL) <a href="#unsolved-latent-ul-tables" id="unsolved-latent-ul-tables"></a>

Las tablas de Latentes No Resueltas se usan para almacenar información sobre los datos de la UL y los candidatos. Las tablas se describen a continuación.

### gbds.ul

La tabla `ul`fue diseñada para almacenar todos los UL del GBDS y se describe de la siguiente forma:

<table><thead><tr><th width="150">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>uguid</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria; UGUID almacenado en HBase</td></tr><tr><td>ul_status</td><td>varchar</td><td>255</td><td>not null</td><td><br><code>UNSOLVED</code>o <code>SOLVED</code>; HBase replica este estado</td></tr><tr><td>creation_time</td><td>timestamp</td><td>4</td><td>not null</td><td><code>current_timestamp</code>por defecto</td></tr><tr><td>person_pguid</td><td>varchar</td><td>255</td><td>null</td><td>PGUID de la persona correspondiente cuando<code>SOLVED</code></td></tr><tr><td>person_tguid</td><td>varchar</td><td>255</td><td>null</td><td>TGUID de la persona correspondiente cuando<code>SOLVED</code></td></tr><tr><td>fragment_id</td><td>varchar</td><td>255</td><td>null</td><td>ID del fragmento original para el fragmento que generó el UL</td></tr><tr><td>fragment_case_id</td><td>varchar</td><td>255</td><td>null</td><td>ID del caso original para el fragmento que generó el UL</td></tr><tr><td>fragment_index</td><td>int</td><td>11</td><td>null</td><td>Índice de fragmentos para el UL. Por defecto, el índice se define como <code>-1</code>(índice desconocido, cualquier índice)</td></tr><tr><td>analysis_user</td><td>varchar</td><td>255</td><td>null</td><td>Usuario responsable del análisis UL</td></tr><tr><td>analysis_timestamp</td><td>timestamp</td><td>4</td><td>null</td><td>sello de fecha y hora del análisis</td></tr><tr><td>group_guid</td><td>varchar</td><td>255</td><td>not null</td><td>GUID de agrupamiento (para listar ULs vinculadas)</td></tr></tbody></table>

### gbds.ul\_candidates

La tabla `ul_candidates` fue diseñada para almacenar los candidatos de cada UL que el GBDS mantiene después de cualquier *CORRESPONDENCIA LATENTE INVERSA* realizada en inscripciones que generaron una *coincidencia* con una UL, y se describe de la siguiente manera:

<table><thead><tr><th width="110">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor </th><th>Información Adicional</th></tr></thead><tbody><tr><td>ul_uguid</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria; UL UGUID</td></tr><tr><td>person_pguid</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria; PGUID del candidato</td></tr><tr><td>person_tguid</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria; TGUID del candidato</td></tr><tr><td>person_index</td><td>int</td><td>11</td><td>not null</td><td>Clave primaria; Dedo indicador candidato</td></tr><tr><td>score</td><td>int</td><td>11</td><td>not null</td><td>Puntuación de matching correspondiente para el candidato</td></tr><tr><td>deleted</td><td>tinyint</td><td>1</td><td>not null</td><td><code>0</code>por defecto, indica si el candidato fue excluido para ser excluido al realizar operaciones de listado de candidatos</td></tr><tr><td>minutiae</td><td>longblob</td><td>Hasta 4Gb</td><td>null</td><td>Serialización JSON que contiene las minucias correspondientes. Es una lista con la siguiente estructura:<br> - <code>queryIndex</code>, <code>int</code> <br>- <code>referenceIndex</code>,<code>int</code></td></tr></tbody></table>

## Tablas de notificación

Las tablas de notificación se usan para almacenar datos con fines de auditoría, como correos electrónicos, personas que serán notificadas y grupos.

### gbds.notify\_user

La tabla `notify_user` fue diseñada para almacenar los datos del usuario autenticado por gbds.

<table><thead><tr><th width="100">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; ID único del usuario.</td></tr><tr><td>username</td><td>varchar</td><td>255</td><td>not null</td><td>nombre de usuario gbds autenticado</td></tr></tbody></table>

### gbds.notify\_group

La tabla `notify_group`fue diseñada para almacenar información de los grupos de notificación.

<table><thead><tr><th width="100">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria;</td></tr><tr><td>name</td><td>varchar</td><td>255</td><td>not null</td><td>Nombre del grupo</td></tr><tr><td>enabled</td><td>tinyint</td><td>1</td><td>not null</td><td>Define si el grupo estará activo o no</td></tr></tbody></table>

### gbds.notify\_group\_email

La tabla `notify_group_email` fue diseñada para almacenar los correos electrónicos de un determinado grupo.

<table><thead><tr><th width="130">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; ID del grupo.</td></tr><tr><td>email</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria; <br>Correo electrónico que pertenece al grupo</td></tr></tbody></table>

### gbds.notify\_user\_group

La tabla `notify_user_group` fue diseñada para almacenar información de a qué grupo pertenece un determinado usuario.

<table><thead><tr><th width="130">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>notify_user_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Referencia al usuario<code>notify_user.id</code></td></tr><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Referencia al grupo<code>notify_group_email.notify_group.id</code></td></tr></tbody></table>

### gbds.people\_transparency

La tabla `people_transparency` fue diseñada para almacenar información sobre una determinada persona y qué acciones se toman cuando esa persona es consultada.

<table><thead><tr><th width="100">Columna</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria;</td></tr><tr><td>pguid</td><td>varchar</td><td>255</td><td>not null</td><td>Referencia a la persona<code>people.pguid</code></td></tr><tr><td>enabled</td><td>tinyint</td><td>1</td><td>not null</td><td>Referencia a la persona<code>people.pguid</code></td></tr><tr><td>action</td><td>varchar</td><td>255</td><td>null</td><td>Acción a tomar</td></tr></tbody></table>

### gbds.people\_transparency\_group

La tabla `people_transparency_group` fue diseñada para almacenar información sobre los grupos a los que una persona pertenece.

<table><thead><tr><th width="180">Column</th><th width="100">Type</th><th width="100">Size</th><th width="100">Value</th><th>Información Adicional</th></tr></thead><tbody><tr><td>people_transparency_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Referencia a people_transparency's<code>people_transparency.id</code></td></tr><tr><td>notify_group_id</td><td>bigint</td><td>20</td><td>not null</td><td>Clave primaria; Referencia al grupo<code>notify_group_email.notify_group.id</code></td></tr></tbody></table>

## Tablas de configuraciones del GBDS

GBDS utiliza una base de datos relacional para almacenar algunas configuraciones de la API y del GBDS. La tabla de configuraciones es una tabla especial diseñada para controlar determinadas configuraciones del GBDS y de la API del GBDS. Estas configuraciones se almacenan en la `gbds.settings`tabla. La tabla puede contener configuraciones presentes en la API del GBDS, en el GBDS o en ambos, siguiendo el esquema abajo:

<table><thead><tr><th width="100">Tipo</th><th width="100">Tipo</th><th width="100">Tamaño</th><th width="100">Valor</th><th>Información Adicional</th></tr></thead><tbody><tr><td>skey</td><td>varchar</td><td>255</td><td>not null</td><td>Clave primaria. Nombre de la clave de parámetro.</td></tr><tr><td>stype</td><td>varchar</td><td>50</td><td>not null</td><td>Lugar de donde proviene el parámetro. API o GBDS</td></tr><tr><td>svalue</td><td>varchar</td><td>4096</td><td>null</td><td>Valor del parámetro</td></tr><tr><td>description</td><td>varchar</td><td>4096</td><td>null</td><td>Descripción del parámetro</td></tr><tr><td>stimestamp</td><td>datetime</td><td>6</td><td>not null</td><td>Sello de fecha y hora</td></tr><tr><td>host</td><td>varchar</td><td>1024</td><td>null</td><td>Nombre del host de un nodo</td></tr></tbody></table>

Todas las configuraciones encontradas en la tabla serán escritas en el respectivo archivo, `gbdsapi.properties`tanto para la API del GBDS como `application.conf`para el GBDS, cada 15 minutos. Además, todas las configuraciones actualizadas en memoria, tanto en la API como en el GBDS, serán propagadas.

{% hint style="info" %}
El valor del parámetro definido en la `gbds.settings`tabla será propagado a TODOS los nodos.
{% endhint %}

Este recurso es controlado por un parámetro de configuración en la tabla, `gbds.rdbSystemConfiguration.enabled`. Este parámetro permitirá la sustitución de los valores de configuración del GBDS y de la API. Establecer el valor del parámetro como `BOTH`hará que las configuraciones del GBDS y de la API sean sustituidas.

| gbds.settings / Clave de configuración de archivo                     | Tipo |
| --------------------------------------------------------------------- | ---- |
| gbscluster.min.quality                                                | API  |
| gbds.enroll.fingerprints.min-nr-template                              | API  |
| gbds.enroll.face.min-nr-template                                      | API  |
| gbds.enroll.iris.min-nr-template                                      | API  |
| gbds.enroll.palmprint.min-nr-template                                 | API  |
| gbds.enroll.newborn-palmprint.min-nr-template                         | API  |
| gbscluster.enroll.fingerprints.verify.matchthreshold                  | API  |
| gbscluster.update.min.quality                                         | API  |
| gbds.transparency.search.identify.request.notify.enabled              | API  |
| gbds.transparency.search.identify.result.actions.enabled              | API  |
| gbds.api.logLevel                                                     | API  |
| gbds.extraction.service                                               | API  |
| gbds.extraction.service.face.count                                    | API  |
| gbds.extraction.service.ginger.count                                  | API  |
| gbds.extraction.service.girl.count                                    | API  |
| gbds.extraction.service.hostname                                      | API  |
| gbds.extraction.service.initialPort                                   | API  |
| gbds.extraction.service.logLevel                                      | API  |
| gbds.extraction.service.maxTries                                      | API  |
| gbds.extraction.service.linkLibSegfault                               | API  |
| gbds.extraction.quality.service                                       | API  |
| gbds.extraction.quality.fillTransactionQualityPropertiesTable         | API  |
| gbds.faces.extraction.quality.api                                     | API  |
| gbds.faces.extraction.quality.background                              | API  |
| gbds.fingerprints.extraction.quality.api                              | API  |
| gbds.fingerprints.extraction.quality.background                       | API  |
| gbds.extraction.quality.service.finger.count                          | API  |
| gbds.extraction.quality.service.face.count                            | API  |
| gbds.extraction.quality.service.initialPort                           | API  |
| gbds.extraction.quality.service.logLevel                              | API  |
| gbds.extraction.quality.service.timeout                               | API  |
| gbds.extraction.quality.service.hostname                              | API  |
| gbds.extraction.quality.service.maxTries                              | API  |
| gbds.extraction.quality.service.linkLibSegfault                       | API  |
| gbds.extraction.quality.service.rows-on-select                        | API  |
| gbds.extraction.quality.service.submitted-queue-factor                | API  |
| gbds.enroll.face.min.quality                                          | API  |
| gbds.update.face.min.quality                                          | API  |
| gbds.monitor.url                                                      | API  |
| gbds.template.face.multiplicity                                       | API  |
| gbds.biographicBase.enabled                                           | API  |
| gbds.biographicBase.endpoints                                         | API  |
| gbds.biographicBase.get.timeout.ms                                    | API  |
| gbds.biographicBase.list.timeout.ms                                   | API  |
| gbds.biographicBase.logLevel                                          | API  |
| gbds.biographicBase.clientID                                          | API  |
| gbds.biographicBase.clientSecret                                      | API  |
| gbds.biographicBase.lookAllServers                                    | API  |
| gbscluster.fingerprints.extraction.enroll.type                        | API  |
| gbscluster.fingerprints.extraction.verify.type                        | API  |
| gbds.update.exception.reextract                                       | API  |
| gbds.update.exception.reextract.save                                  | API  |
| gbds.biographicBase.autoUpdate                                        | API  |
| gbds.biographicBase.sendPguidAsKey                                    | API  |
| gbds.biographicBase.sendTguidAsKey                                    | API  |
| gbds.log.diagnose                                                     | GBDS |
| gbds.ul.boot.scan.enabled                                             | GBDS |
| gbds.boot.scan.ignoreErrorsOnRegion                                   | GBDS |
| gbds.boot.matcher.creation.sleepTime.ms                               | GBDS |
| gbds.biometric.fingerprint.identify.threshold                         | GBDS |
| gbds.biometric.fingerprint.exception.threshold                        | GBDS |
| gbds.biometric.fingerprint.exception.enabled                          | GBDS |
| gbds.biometric.fingerprint.exception.enroll.min-matches-for-exception | GBDS |
| gbds.biometric.face.identify.threshold                                | GBDS |
| gbds.biometric.face.exception.threshold                               | GBDS |
| gbds.peopleList.countFromRDB                                          | GBDS |
| gbds.biometric.face.enabled.threshold                                 | GBDS |
| gbds.driver.logLevel                                                  | GBDS |
| gbds.log.loadUnload                                                   | GBDS |
| gbds.template.memory.format                                           | GBDS |
| gbds.match.service.enabled                                            | GBDS |
| gbds.match.service.initialPort                                        | GBDS |
| gbds.match.service.logLevel                                           | GBDS |
| gbds.match.service.timeout                                            | GBDS |
| gbds.match.service.templateSend.parallelByModality                    | GBDS |
| gbds.match.service.linkLibSegfault                                    | GBDS |
| gbds.match.service.maxTries                                           | GBDS |
| gbds.match.service.maxConnectionErrors                                | GBDS |
| gbds.memory-monitor                                                   | GBDS |
| gbds.watchdog.interval                                                | GBDS |
| gbds.watchdog.log.mode                                                | GBDS |
| gbds.watchdog.log.level                                               | GBDS |
| gbds.verifyPostMatch.enabled                                          | GBDS |
| gbds.transparency.search.identify.result.notify.enabled               | BOTH |
| gbds.transparency.email-notifier.url                                  | BOTH |
| gbds.transparency.email-notifier.log-level                            | BOTH |
| gbds.transparency.email-notifier.timeout                              | BOTH |
| gbscluster.update.consider.fingerprints                               | BOTH |
| gbscluster.update.consider.faces                                      | BOTH |
| gbscluster.update.consider.faces.beforeFingerprints                   | BOTH |
| gbscluster.update.faces.verify.matchthreshold                         | BOTH |
| gbscluster.update.minimum.fingers                                     | BOTH |
| gbds.search.verify.adjust-resolution                                  | BOTH |

Otras configuraciones pueden colocarse en la tabla `gbds.settings`en rdb y todas serán registradas en la API o en el archivo GBDS, de acuerdo con el tipo de configuración. Sin embargo, las recargas de memoria en tiempo de ejecución no se realizarán para estas nuevas configuraciones, solo después del reinicio de la API y/o del GBDS.
