---
{
  "title": "Aidbox se convierte en el primer servidor FHIR en superar todas las pruebas de SQL on FHIR",
  "description": "Aidbox acaba de convertirse en el primer servidor FHIR en superar todas las pruebas de SQL on FHIR, gracias a la compatibilidad completa con el elemento repeat. Esta actualización permite a los ingenieros consultar estructuras FHIR profundamente anidadas, como QuestionnaireResponse.item, con una única definición elegante.",
  "date": "2025-11-06",
  "author": "Aleksandr Kislitsyn",
  "reading-time": "3 minutes",
  "tags": [
    "SQL on FHIR",
    "Aidbox"
  ]
}
---

> For the complete documentation index, see [llms.txt](https://www.health-samurai.io/llms.txt).
> Use it to discover all available pages before guessing URLs.

---
Recientemente hemos añadido compatibilidad con el elemento
[
repeat
](https://build.fhir.org/ig/FHIR/sql-on-fhir-v2/StructureDefinition-ViewDefinition-definitions.html#diff_ViewDefinition.select.repeat)
de la
[
especificación SQL on FHIR
](https://build.fhir.org/ig/FHIR/sql-on-fhir-v2/index.html) —convirtiendo a Aidbox en el primer servidor FHIR en superar todas las pruebas del
[
conjunto de pruebas de SQL on FHIR
](https://sql-on-fhir.org/extra/impls.html).

![SQL-on-FHIR test suite results](image-1.avif)

Este hito refleja nuestro trabajo continuo para facilitar la consulta, el análisis y la reutilización de datos clínicos estructurados, sin necesidad de transformaciones complejas ni lógica personalizada. SQL on FHIR tiende un puente entre el modelo de datos flexible de FHIR y la simplicidad de SQL, lo que permite a los equipos sanitarios extraer información directamente de sus datos FHIR.

## ¿Qué es el elemento repeat y cómo funciona?

`select.repeat` permite especificar una lista de expresiones [FHIRPath](/articles/unlocking-fhirpath-power-a-deep-dive-into-static-type-analysis-for-robust-tooling), cada una de las cuales define una ruta para recorrer un recurso FHIR de forma recursiva. Aidbox sigue entonces automáticamente cada ruta hasta cualquier profundidad, recopilando los resultados de todos los niveles.

En términos sencillos, ayuda a aplanar datos sanitarios complejos y profundamente anidados en una tabla fácil de consultar, ahorrando horas de configuración manual y preparación de datos.

Por ejemplo, un recurso [
FHIR QuestionnaireResponse
](https://build.fhir.org/questionnaireresponse.html) puede contener secciones, preguntas y elementos de seguimiento organizados de forma jerárquica. Cada elemento `item` puede incluir otros elementos `item` del mismo tipo, y estos pueden incluir elementos adicionales, formando una estructura recursiva con cualquier nivel de anidamiento.

Considere el siguiente ejemplo:


```javascript
{
 "resourceType": "QuestionnaireResponse",
 "status": "amended",
 "id": "qr1",
 "item": [
  {
   "linkId": "1",
   "text": "Group 1",
   "item": [
    {
     "linkId": "1.1",
     "text": "Question 1.1",
     "answer": [
      {
       "valueString": "Answer 1.1",
       "item": [
        {
         "linkId": "1.1.1",
         "text": "Follow-up to 1.1"
        }
       ]
      }
     ]
    },
    {
     "linkId": "1.2",
     "text": "Question 1.2",
     "item": [
      {
       "linkId": "1.2.1",
       "text": "Question 1.2.1"
      }
     ]
    }
   ]
  },
  {
   "linkId": "2",
   "text": "Group 2"
  }
 ]
}
```


En lugar de utilizar un elemento `forEach` independiente para cada nivel de anidamiento, puede emplear `repeat` para recorrer toda la estructura de forma recursiva y extraer todos los elementos `item` de una sola vez:

ViewDefinition:


```javascript
{
  "resource": "QuestionnaireResponse",
  "status": "active",
  "select": [
    {
      "column": [
        {
          "name": "id",
          "path": "id",
          "type": "id"
        }
      ]
    },
    {
      "repeat": [
        "item"
      ],
      "column": [
        {
          "name": "linkId",
          "path": "linkId",
          "type": "string"
        },
        {
          "name": "text",
          "path": "text",
          "type": "string"
        }
      ]
    }
  ]
}
```


El resultado de ejecutar este ViewDefinition será una tabla con las siguientes columnas:

| id | linkId | text |
| --- | --- | --- |
| qr1 | 1 | Group 1 |
| qr1 | 1.1 | Question 1.1 |
| qr1 | 1.2 | Question 1.2 |
| qr1 | 1.2.1 | Question 1.2.1 |
| qr1 | 2 | Group 2 |

## Pruébelo usted mismo
Puede probarlo ejecutando una nueva instancia de Aidbox siguiendo las instrucciones de la guía [Ejecutar Aidbox localmente](https://www.health-samurai.io/docs/aidbox/getting-started/run-aidbox-locally).

Véase también: [Validación con SQL on FHIR](/blog/sql-on-fhir-validation) e [Introducción a $materialize: interfaz SQL para datos FHIR](/blog/introducing-materialize-sql-interface-for-fhir-data).