Guía completa ATQL — Athento Query Language

Tabla de contenidos

ATQL — Athento Query Language

ATQL (Athento Query Language) es un lenguaje similar a SQL para consultar documentos en Athento. Permite definir qué campos devolver, qué formularios consultar y qué condiciones aplicar para filtrar resultados, tanto por campos del documento como por campos propios del formulario.

Sintaxis general

SELECT (*|<fields>) FROM <forms> [WHERE <conditions>] [ORDER BY <fields>] [GROUP BY <fields>]

Las cláusulas SELECT y FROM son obligatorias. El resto son opcionales.

Cláusula SELECT

Indica los campos (separados por comas) que se devolverán en el resultado, o * para devolver el documento completo.

SELECT * FROM Document
SELECT uuid, filename, author FROM my_form
SELECT uuid, metadata.invoice_number FROM my_form

Cláusula FROM

Especifica la lista de formularios sobre los que se ejecutará la consulta. Usa Document para consultar todos los formularios disponibles.

SELECT * FROM Document
SELECT * FROM my_form
SELECT * FROM form_a, form_b

Campos fijos del documento

Estos campos están disponibles siempre, independientemente del formulario. También se admiten nombres con estilo CMIS (por ejemplo, ecm:uuid, dc:title, dc:created).

Campo Aliases Descripción
uuid — Identificador del documento
filename title Título del documento
author — Usuario creador del documento
creation_date created Fecha de creación
modified_date modified, modification_date Fecha de la última modificación
validation_date validated Fecha de validación
validator validated_by Usuario que validó el documento
space serie Espacio donde se encuentra el documento
form doctype Nombre del formulario del documento
life_cycle_state — Estado del ciclo de vida
state — Estado del documento
size — Tamaño del archivo
hash — Hash del documento

Campos del formulario

Para filtrar o seleccionar campos del formulario, usa el prefijo metadata.:

SELECT metadata.invoice_number FROM my_form WHERE metadata.invoice_number = '1234'
SELECT uuid, metadata.field_a, metadata.field_b FROM my_form WHERE metadata.field_a = '10'

Cláusula WHERE

Permite filtrar los resultados mediante condiciones sobre campos del documento y campos del formulario. Puedes anidar condiciones con paréntesis.

Operadores de comparación

Operador Descripción
= Igual
!= Distinto
< Menor que
<= Menor o igual que
> Mayor que
>= Mayor o igual que

Operadores de patrón

Operador Descripción
LIKE Coincidencia parcial sensible a mayúsculas
ILIKE Coincidencia parcial insensible a mayúsculas
~ Coincidencia mediante expresión regular

Operadores de rango y conjunto

Operador Descripción
IN Coincide con cualquiera de los valores de una lista
BETWEEN Coincide con valores dentro de un rango (incluyente)
IS Similar a =, pero también permite comparar con valores null

Operadores lógicos

Operador Descripción
AND Ambas condiciones deben ser verdaderas
OR Al menos una condición debe ser verdadera
NOT Niega la condición siguiente

Ejemplo con condiciones anidadas:

SELECT * FROM my_form
WHERE (filename = 'a.pdf' OR filename = 'b.pdf')
  AND NOT metadata.status = 'archived'

Cláusula ORDER BY

Ordena los resultados por uno o varios campos. La dirección predeterminada es ascendente (ASC).

-- Ascendente (por defecto)
SELECT uuid FROM Document ORDER BY creation_date

-- Descendente
SELECT * FROM Document ORDER BY uuid DESC

-- Múltiples campos
SELECT filename FROM my_form ORDER BY filename, uuid DESC

Funciones

ATQL incluye funciones integradas para trabajar con fechas dinámicas y con el usuario autenticado.

Funciones de fecha

Función Parámetros Retorna Formato
NOW(offset) Offset opcional Fecha y hora actual ± offset yyyy-MM-dd hh:mm:ss
TODAY — Fecha actual yyyy-MM-dd
YESTERDAY — Día anterior yyyy-MM-dd
TOMORROW — Día siguiente yyyy-MM-dd

El offset de NOW combina códigos de unidad: w (semanas), d (días), h (horas), m (minutos) y s (segundos). Antepon - para restar.

Offset Significado
1w 1 semana desde ahora
2d 2 días desde ahora
-3h Hace 3 horas
1w2d 1 semana y 2 días desde ahora
-3h4m Hace 3 horas y 4 minutos

Función de usuario

Función Retorna
CURRENT_USER Nombre del usuario autenticado actualmente

Ejemplos de uso

-- Documentos creados en la última semana
SELECT * FROM my_form WHERE creation_date > NOW(-1w)

-- Documentos creados hoy
SELECT * FROM my_form WHERE creation_date > TODAY

-- Documentos creados desde ayer
SELECT * FROM my_form WHERE creation_date > YESTERDAY

-- Documentos del usuario actual
SELECT * FROM my_form WHERE author = CURRENT_USER

-- Documentos con vencimiento entre hace 1 semana y mañana
SELECT * FROM my_form WHERE creation_date BETWEEN NOW(-1w) AND TOMORROW

-- Campos del formulario que vencen en la próxima semana
SELECT * FROM Document WHERE metadata.expiration_date BETWEEN TODAY AND NOW(1w)

GROUP BY y funciones de agregación

Usa GROUP BY para agrupar resultados e incluye una función de agregación en el SELECT.

Nota: en las consultas agrupadas, el número de resultados predeterminado es 20. Usa el parámetro page_size para obtener más.

Funciones de agregación

Función Descripción
count(field) Número de documentos por valor
sum(field) Suma de los valores del campo
avg(field) Promedio ponderado de los valores
min(field) Valor mínimo del campo
max(field) Valor máximo del campo
max_min(field) Valores máximo y mínimo del campo

Ejemplos de agregación

-- Documentos por autor y espacio desde ayer
SELECT count(author), count(serie) FROM my_form
WHERE creation_date > YESTERDAY
GROUP BY author, serie

-- Valor máximo de un campo del formulario
SELECT max(metadata.total_invoice) FROM Document
GROUP BY metadata.total_invoice

-- Máximo y mínimo de un campo del formulario
SELECT max_min(metadata.total_invoice) FROM Document
GROUP BY metadata.total_invoice

JOIN y EXCLUDE JOIN

ATQL permite combinar documentos a partir de formularios relacionados.

-- Incluir documentos relacionados mediante join
SELECT * FROM form_a JOIN form_b ON ...

-- Excluir documentos que coinciden con la condición de join
SELECT * FROM form_a EXCLUDE JOIN form_b ON ...

Ejemplos completos

-- Todos los documentos de un formulario
SELECT * FROM Document

-- Filtro por filename con OR
SELECT uuid, filename FROM Document
WHERE filename = 'Athento1.pdf' OR filename = 'Athento2.pdf'

-- Booleano complejo con campos del formulario
SELECT uuid, filename FROM MyForm
WHERE (filename = 'Athento1.pdf' OR filename = 'Athento2.pdf')
  AND (metadata.contract_number = '123456'
       AND NOT metadata.city IN ('Málaga', 'Madrid'))
ORDER BY uuid DESC

-- Rango de fechas
SELECT uuid, creation_date FROM my_form
WHERE (creation_date BETWEEN '2022-01-01' AND '2022-12-31'
       OR modified_date > '2022-12-01')
  AND NOT state = 'pending'
ORDER BY creation_date

-- Comprobación de null en campos del formulario
SELECT uuid, filename FROM my_form
WHERE metadata.my_metadata IS NULL

-- Selección de campos del formulario con filtros múltiples
SELECT uuid, metadata.field_a, metadata.field_b FROM my_form
WHERE NOT metadata.field_a = '10'
  AND (metadata.field_b = '20' OR filename = 'PDF-Athento.pdf')

-- Filtro por estado del ciclo de vida
SELECT * FROM Document WHERE life_cycle_state = 'Iniciado' ORDER BY uuid DESC

Tipos de error

Error Cuándo ocurre
ATQLSyntaxError Cuando la consulta tiene una sintaxis no válida
ATQLException Error general al procesar una consulta ATQL
UnsupportedATQLError Cuando la consulta utiliza una funcionalidad que aún no está soportada