---
{
  "title": "Aidbox devient le premier serveur FHIR à réussir tous les tests SQL on FHIR",
  "description": "Aidbox vient de devenir le premier serveur FHIR à réussir tous les tests SQL on FHIR — grâce à la prise en charge complète de l'élément repeat. Cette mise à jour permet aux ingénieurs d'interroger des structures FHIR profondément imbriquées comme QuestionnaireResponse.item avec une définition unique et élégante.",
  "date": "2025-11-06",
  "author": "Aleksandr Kislitsyn",
  "reading-time": "3 minutes",
  "tags": [
    "SQL on FHIR",
    "Aidbox"
  ]
}
---
Nous avons récemment ajouté la prise en charge de l'élément
[
repeat
](https://build.fhir.org/ig/FHIR/sql-on-fhir-v2/StructureDefinition-ViewDefinition-definitions.html#diff_ViewDefinition.select.repeat)
de la
[
spécification SQL on FHIR
](https://build.fhir.org/ig/FHIR/sql-on-fhir-v2/index.html) — faisant d'Aidbox le premier serveur FHIR à réussir tous les tests de la
[
suite de tests SQL on FHIR
](https://sql-on-fhir.org/extra/impls.html).

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

Cette étape témoigne de notre travail continu pour faciliter l'interrogation, l'analyse et la réutilisation des données cliniques structurées — sans transformations complexes ni logique personnalisée. SQL on FHIR comble l'écart entre le modèle de données flexible de FHIR et la simplicité du SQL, permettant aux équipes du secteur de la santé d'extraire des informations directement à partir de leurs données FHIR.

## Qu'est-ce que l'élément repeat et comment fonctionne-t-il?

L'élément `select.repeat` vous permet de spécifier une liste d'expressions [FHIRPath](/articles/unlocking-fhirpath-power-a-deep-dive-into-static-type-analysis-for-robust-tooling), chacune définissant un chemin pour parcourir une ressource FHIR de façon récursive. Aidbox suit alors automatiquement chaque chemin à n'importe quelle profondeur, en collectant les résultats de tous les niveaux.

En termes simples, cela permet d'aplatir des données de santé complexes et profondément imbriquées en un tableau facile à interroger — économisant des heures de configuration manuelle et de préparation des données.

Par exemple, une ressource [
FHIR QuestionnaireResponse
](https://build.fhir.org/questionnaireresponse.html) peut contenir des sections, des questions et des éléments de suivi organisés de façon hiérarchique. Chaque élément `item` peut inclure d'autres éléments `item` du même type — et ceux-ci peuvent en inclure d'autres, formant une structure récursive avec n'importe quel niveau d'imbrication.

Considérons l'exemple suivant :


```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"
  }
 ]
}
```


Plutôt que d'avoir un élément `forEach` distinct pour chaque niveau d'imbrication, vous pouvez utiliser `repeat` pour parcourir toute la structure de façon récursive et extraire tous les éléments `item` en une seule fois :

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"
        }
      ]
    }
  ]
}
```


Le résultat de l'exécution de cette ViewDefinition sera un tableau avec les colonnes suivantes :

| 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 |

## Essayez-le vous-même
Vous pouvez l'essayer vous-même en démarrant une nouvelle instance Aidbox en suivant les instructions du guide [Exécuter Aidbox localement](https://www.health-samurai.io/docs/aidbox/getting-started/run-aidbox-locally).

Voir aussi : [Validation SQL on FHIR](/blog/sql-on-fhir-validation) et [Présentation de $materialize : interface SQL pour les données FHIR](/blog/introducing-materialize-sql-interface-for-fhir-data).