Tracker¶
Avertissement
Le tracker a été réimplémenté dans DHIS2 2.36. Ce document décrit les nouveaux endpoints du tracker
POST /api/trackerGET /api/tracker/trackedEntitiesGET /api/tracker/enrollmentsGET /api/tracker/eventsGET /api/tracker/relationshipsTracker (obsolète) décrit les endpoints obsolètes
GET/POST/PUT/DELETE /api/trackedEntityInstanceGET/POST/PUT/DELETE /api/enrollmentsGET/POST/PUT/DELETE /api/eventsGET/POST/PUT/DELETE /api/relationshipsLes endpoints obsolètes seront supprimés dans la version 42!
Migration vers de nouveaux endpoints du tracker devrait vous aider à démarrer votre migration. Contactez la [communauté de pratique] (https://community.dhis2.org) si vous avez besoin d'aide supplémentaire.
Objets du Tracker¶
Le Tracker est constitué de différents types d'objets interconnectés destinés à représenter les données. Dans cette section, nous montrerons et décrirons chacun des objets utilisés dans l'API du Tracker.
Les entités suivies¶
Les entités suivies constituent la base du modèle Tracker.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| Entité suivie | L’identifiant de l’entité suivie. Il est généré au cas où il n'est pas fourni | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| TrackedEntityType (Type d'entité suivie) | Le type d’entité suivie. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| créé à | Date et heure à laquelle l'utilisateur a créé l'entité suivie. Elle est définie sur le serveur. | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| crééAtClient (Création au niveau du client) | Date et heure à laquelle l'utilisateur a créé l'entité suivie au niveau du client. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Timestamp when the object or any enrollment, event, attribute or originating relationship, was last updated. Set on the server. | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAtClient (mise à jour au niveau du client) | Date et heure de la dernière mise à jour de l'objet au niveau du client. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| orgUnit (Unité d'organisation) | L'unité d'organisation dans laquelle l'utilisateur a créé l'entité suivie. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| inactif | Indique si l'entité suivie est inactive ou non. | Non | Oui | Booléen | Par défaut: faux, vrai |
| supprimé | Indique si l'entité suivie a été supprimée. Ne peut être modifié qu'au moment de la suppression. | Non | Non | Booléen | Faux jusqu'à suppression |
| potentialDuplicate (doublon potentiel) | Indique si l'entité suivie est un doublon potentiel | Non | Non | Booléen | Par défaut: faux |
| géométrie | Il s'agit d'une représentation géographique de l'entité suivie. Elle se base sur le « type de fonctionnalité » du type d'entité suivie. | Non | Oui | GeoJson | { "type": "POINT", "coordonnées": [123.0, 123.0] } |
| storedBy (Stockée par) | Client reference for who stored/created the tracked entity. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| createdBy (créé par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a créé l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| updatedBy (mis à jour par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a mis à jour l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| attributs | Liste des valeurs d'attributs d'entité suivie appartenant à l'entité suivie. | Non | Oui | Liste des valeurs d'attributs d'entité suivie | Voir les attributs |
| inscriptions | Liste des inscriptions appartenant à l’entité suivie. | Non | Oui | Liste des inscriptions | Voir les inscriptions |
| relations | Liste de relations connectées à l'entité suivie. | Non | Oui | Liste des relations | Voir les relations |
| Propriétaires du programme | Liste des unités d'organisation qui ont accès via des programmes spécifiques à cette entité suivie. Voir « Propriété du programme » pour en savoir plus. | Non | Oui | Liste des propriétaires du programme | Voir la section « Propriété du programme » |
Remarque
Les
entités suivies"possèdent" toutes lesValeurs d'attribut d'entités suivies(ou les "attributs" décrits dans le tableau précédent). Cependant, lesattributs d'entités suiviessont soit connectés à uneentité suivievia sontype d'entité suiviesoit à unprogramme. Nous désignons souvent cette séparation parAttributs de type d'entité suivietAttributs de programme d'entité suivi. L'importance de cette distinction est liée au contrôle d'accès et à la limitation des informations que l'utilisateur peut voir.Les "attributs" mentionnés dans
Entité suiviesont desAttributs de type d'entité suivie.
Inscriptions¶
Les Entités suivies peuvent s'inscrire aux Programmes pour lesquels elles sont éligibles. Les entités suivies sont éligibles tant que le programme est configuré avec le même Type d'entité suivie que l'entité suivie. Nous représentons l'inscription avec l'objet Inscription, que nous décrivons dans cette section.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| inscription | L’identifiant de l'inscription. Il est généré au cas où il n'est pas fourni | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| programme | Le programme que représente l’inscription. | Oui | Non | Chaîne : Uid | ABCDEF12345 |
| Entité suivie | Une référence à l’entité suivie inscrite. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| statut | Statut de l'inscription. Il est ACTIF au cas où n'est pas fourni. | Non | Non | Énumération | ACTIF, EFFECTUÉ, ANNULÉ |
| orgUnit (Unité d'organisation) | L'unité d'organisation dans laquelle l'utilisateur a inscrit l'entité suivie. | Oui | Non | Chaîne : Uid | ABCDEF12345 |
| créé à | Date et heure à laquelle l'utilisateur a créé l'objet. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| crééAtClient (Création au niveau du client) | Date à laquelle l'utilisateur a créé l'objet au niveau du client | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Date et heure de la dernière mise à jour de l'objet. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAtClient (mise à jour au niveau du client) | Date et heure de la dernière mise à jour de l'objet au niveau du client. | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| inscrit à | Date et heure à laquelle l'utilisateur a inscrit l'entité suivie. | Oui | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| occurredAt (s'est produit à) | Date et heure à laquelle l'inscription a eu lieu. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| completedAt (effectué à) | Date et heure à laquelle l'utilisateur a effectué l'inscription. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| completedBy (effectué par) | Fait référence à la personne qui a effectué l'inscription | Non | Non | Chaîne : Toute | John Doe |
| Suivi | Indique si l'inscription nécessite un suivi. La valeur est "Faux" si rien n'est fourni | Non | Non | Booléen | Par défaut : Faux, Vrai |
| supprimé | Indique si l'inscription a été supprimée. Ne peut être modifié qu'au moment de la suppression. | Non | Oui | Booléen | Faux jusqu'à suppression |
| géométrie | Il s'agit d'une représentation géographique de l'inscription. Elle se base sur le « type de fonctionnalité » du programme. | Non | Non | GeoJson | { "type": "POINT", "coordonnées": [123.0, 123.0] } |
| storedBy (Stockée par) | Client reference for who stored/created the enrollment. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| createdBy (créé par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a créé l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| updatedBy (mis à jour par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a mis à jour l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| attributs | Liste des valeurs d'attributs d'entité suivie associées à l'inscription. | Non | Non | Liste des valeurs d'attributs d'entité suivie | Voir les attributs |
| événements | Liste des événements appartenant à l'inscription. | Non | Non | Liste des événements | Voir les évènements |
| relations | Liste des relations liées à l'inscription. | Non | Non | Liste des relations | Voir les relations |
| notes | Notes liées à l'inscription. Elles ne peuvent qu'être créées. | Non | Oui | Liste des notes | Voir les notes |
Remarque
Les
entités suivies"possèdent" toutes lesValeurs d'attribut d'entités suivies(ou les "attributs" décrits dans le tableau précédent). Cependant, lesattributs d'entités suiviessont soit connectés à uneentité suivievia sontype d'entité suiviesoit à unprogramme. Nous désignons souvent cette séparation parAttributs de type d'entité suivietAttributs de programme d'entité suivi. L'importance de cette distinction est liée au contrôle d'accès et à la limitation des informations que l'utilisateur peut voir.Les "attributs" mentionnés dans
Inscriptionsont desAttributs de programmes d'entités suivies.
Événements¶
Les Événements font partie d'un PROGRAMME D'ÉVÉNEMENT ou d'un PROGRAMME TRACKER. Pour le PROGRAMME TRACKER, les événements appartiennent à une Inscription, laquelle appartient à une Entité suivie. D'un autre côté, PROGRAMME D'ÉVÉNEMENT concerne les Événements non rattachées à une Inscription ou à une Entité suivie spécifique. La différence réside dans le fait que nous effectuons ou non un suivi pour une Entité suivie spécifique. Nous désignons parfois les événements PROGRAMME D'ÉVÉNEMENT "événements anonymes "ou "événements uniques" puisqu'ils ne se représentent qu'eux-mêmes et non une autre Entité suivie.
Dans l'API, la différence majeure est que tous les événements sont soit rattachés à la même inscription (PROGRAMME D'ÉVÈNEMENT), soit à des inscriptions différentes (PROGRAMME TRACKER). Le tableau ci-dessous signalera les cas exceptionnels entre ces deux.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| événement | L'identifiant de l'événement. Il est généré au cas où il n'est pas fourni | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| Étape du programme | L'étape du programme que représente l'événement. | Oui | Non | Chaîne : Uid | ABCDEF12345 |
| inscription | Il s'agit d'une référence à l’inscription qui à laquelle appartient l’événement. Ceci ne s'applique pas au PROGRAMME D'ÉVÉNEMENT | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| programme | Uniquement pour lire les données. Il s'agit du type de programme de l'inscription qui possède l'événement. | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| Entité suivie | Uniquement pour lire les données. Il s'agit de l'entité suivie propriétaire de l'événement. Ceci ne s'applique pas au PROGRAMME D'ÉVÉNEMENT | Non | Non | Chaîne : Uid | ABCDEF12345 |
| statut | Statut de l'évènement. Il est ACTIF au cas où n'est pas fourni. | Non | Non | Énumération | ACTIF, EFFECTUÉ, VISITÉ, HORAIRE, EN RETARD, SAUTÉ |
| Statut de l'inscription | Uniquement pour lire les données. Il s'agit du statut de l'inscription propriétaire de l'événement. Ceci ne s'applique pas au PROGRAMME D'ÉVÉNEMENT | Non | Non | Énumération | ACTIF, EFFECTUÉ, ANNULÉ |
| orgUnit (Unité d'organisation) | Il s'agit de l'unité d'organisation dans laquelle l'utilisateur a enregistré l'événement. | Oui | Non | Chaîne : Uid | ABCDEF12345 |
| créé à | Uniquement pour lire des données. Date et heure à laquelle l'utilisateur a créé l'évènement. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| crééAtClient (Création au niveau du client) | Date et heure à laquelle l'utilisateur a créé l'évènement au niveau du client | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Uniquement pour lire des données. Date et heure de la dernière mise à jour de l'évènement. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAtClient (mise à jour au niveau du client) | Date et heure de la dernière mise à jour de l'évènement au niveau du client. | Non | Non | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| scheduledAt (programmé à) | Date et heure à laquelle l'évènement a été programmée. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| occurredAt (s'est produit à) | Date et heure à laquelle quelque chose se passe. | Oui | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| completedAt (effectué à) | Date et heure à laquelle l'utilisateur a effectué l'évènement. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| completedBy (effectué par) | Fait référence à la personne qui a effectué l'évènement | Non | Non | Chaîne : Toute | John Doe |
| Suivi | Uniquement pour lire les données. Indique si l'événement a été marqué pour un suivi. | Non | Non | Booléen | Faux, Vrai |
| supprimé | Uniquement pour lire les données. Indique si l'évènement a été supprimée. Ne peut être modifié qu'au moment de la suppression. | Non | Oui | Booléen | Faux jusqu'à suppression |
| géométrie | Il s'agit d'une représentation géographique de l'évènement. Elle se base sur le « type de fonctionnalité » de l'étape de programme. | Non | Non | GeoJson | { "type": "POINT", "coordonnées": [123.0, 123.0] } |
| storedBy (Stockée par) | Client reference for who stored/created the event. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| createdBy (créé par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a créé l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| updatedBy (mis à jour par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a mis à jour l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| attributeOptionCombo (combinaison d'options d'attribut) | Il s'agit de la combinaison d'options d'attribut pour l'événement. Utiliser l'option par défaut si rien n’est fourni ou configuré. | Non | Non | Chaîne : Uid | ABCDEF12345 |
| attributeCategoryOptions (options de catégorie d'attribut) | Il s'agit de l'option de catégorie d'attribut pour l'événement. Utiliser l'option par défaut si rien n’est fourni ou configuré. | Non | Non | Chaîne : Uid | ABCDEF12345 |
| assignedUser (Utilisateur assigné) | Fait référence à un utilisateur qui a été assigné à l'événement. | Non | Non | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| dataValues (Valeurs de données) | Liste des valeurs de données liées à l'événement. | Non | Non | Liste des valeurs d'attributs d'entité suivie | Voir les attributs |
| relations | Liste des relations liées à l'évènement. | Non | Non | Liste des relations | Voir les relations |
| notes | Notes liées à l'évènement. Elles ne peuvent qu'être créées. | Non | Oui | Liste des notes | Voir les notes |
Relations¶
Les Relations sont des objets qui relient deux autres objets Tracker. Les contraintes auxquelles chaque côté de la relation doit se conformer sont basées sur le Type de relation de la Relation.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| relation | L'identifiant de la relation. Il est généré au cas où il n'est pas fourni | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| Type de relation | Il s'agit du type de relation. Il détermine quels objets peuvent être reliés dans une relation. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| Nom de la relation | Uniquement pour lire les données. Il s'agit du nom du type de relation de cette relation | Non | Non | Chaîne : Toute | Sibling |
| créé à | Date et heure à laquelle l'utilisateur a créé la relation. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Date et heure de la dernière mise à jour de la relation. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| crééAtClient (Création au niveau du client) | Date et heure à laquelle l'utilisateur a créé la relation au niveau du client. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| bidirectionnel | Uniquement pour lire les données. Indique si le type de relation est bidirectionnel ou non. | Non | Non | Booléen | Vrai ou faux |
| de, à | Fait référence à chaque côté de la relation. Doit être conforme aux contraintes définies dans le type de relation | Oui | Oui | Élément de la relation | {"trackedEntity": {"trackedEntity": "ABCEF12345"}}, {"enrollment": {"enrollment": "ABCDEF12345"}} or {"event": {"event": "ABCDEF12345" }} |
Remarque
Un
Élément de relationreprésente un lien vers un objet. Étant donné qu'il peut y avoir unerelationentre n'importe quel objet Tracker tel qu'uneentité suivie, uneinscriptionet unévènement, la valeur dépend dutype de relation. Par exemple, si letype de relationrelie unévénementet uneentité suivie, le format est strict:{ "de": { "événement": { "événement": "ABCDEF12345" } }, "à": { "Entité suivie": { "Entité suivie": "FEDCBA12345" } } }
Les attributs¶
Les Attributs sont les valeurs qui décrivent les entités suivies. Ils peuvent être reliés via un type d'entité suivi ou un programme. Implicitement, cela signifie que les attributs peuvent faire partie à la fois d'une entité suivie et d'une inscription.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| attribut | Fait référence à l’attribut d’entité suivi représenté. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| code | Uniquement pour lire les données. Il s'agit du code de l'attribut de l'entité suivie. | Non | Non | Chaîne : Toute | ABC |
| Nom d'affichage | Uniquement pour lire les données. Il s'agit du nom d'affichage de l'attribut de l'entité suivie. | Non | Non | Chaîne : Toute | Nom ; |
| créé à | Date et heure à laquelle la valeur a été ajoutée. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Date et heure de la dernière mise à jour de la valeur. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| storedBy (Stockée par) | Client reference for who stored/created the value. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| Type de valeur | Uniquement pour lire les données. Il s'agit du type de valeur que l'attribut représente. | Non | Non | Énumération | TEXTE, ENTIER et plus |
| valeur | La valeur de l'attribut d'entité suivi. | Non | Non | Chaîne : Toute | John Doe |
Remarque
Pour les
attributs, seules les propriétés "attribut" et "valeur" sont requises lors de l'ajout des données. Une "valeur" peut être nulle, et dans ce cas l'utilisateur doit la supprimer.Dans le contexte des objets Tracker, nous considérons les
Attributs d'entité suivieet lesValeurs d'attribut d'entité suiviecomme des "attributs". Cependant, les attributs sont également des éléments distincts, liés aux métadonnées. Il est donc essentiel de séparer les attributs Tracker et les attributs de métadonnées. Dans l'API du Tracker, il est possible de référencer les attributs des métadonnées lors de la spécification duSchéma d'identification(voir les paramètres de requête pour plus d'informations).
Valeurs de données¶
Alors que les Attributs décrivent une entité suivie ou une inscription, les valeurs de données décrivent un évènement. La différence majeure est que les attributs ne peuvent avoir qu'une seule valeur pour une entité suivie donnée. En revanche, les valeurs de données peuvent avoir plusieurs valeurs différentes selon les événements - même si les événements appartiennent tous à la même inscription ou à la même entité suivie.
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| élément de données | L'élément de données que cette valeur représente. | Oui | Oui | Chaîne : Uid | ABCDEF12345 |
| valeur | La valeur de données. | Non | Non | Chaîne : Toute | 123 |
| Fourni ailleurs | Indique si l'utilisateur a fourni la valeur ailleurs ou non. Faux si la valeur n'a pas été fournie. | Non | Non | Booléen | Faux ou vrai |
| créé à | Date et heure à laquelle l'utilisateur a ajouté la valeur. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| updatedAt (mis à jour à) | Date et heure de la dernière mise à jour de la valeur. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| storedBy (Stockée par) | Client reference for who stored/created the value. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| createdBy (créé par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a créé l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
| updatedBy (mis à jour par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a mis à jour l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
Remarque
Pour les
éléments de données, seules les propriétés "élément de données" et "valeur" sont requises lors de l'ajout des données. Une "valeur" peut être nulle, et dans ce cas l'utilisateur doit la supprimer.
Remarques¶
Le Tracker de DHIS2 permet de recueillir des données à l'aide d'éléments de données et d'attributs d'entités suivies. Cependant, il est parfois nécessaire d'enregistrer des informations supplémentaires ou des commentaires sur le sujet en question. Ces informations supplémentaires peuvent être saisies à l'aide des notes. Les notes correspondent aux commentaires sur les valeurs de données dans DHIS2 Agrégé.
Il existe deux types de notes : les notes enregistrées au niveau de l'événement et celles enregistrées au niveau de l'inscription. Une inscription peut comporter un ou plusieurs événements. Des commentaires sur chaque événement - par exemple, pourquoi un événement a été manqué, reprogrammé, ou pourquoi seuls quelques éléments de données ont été renseignés et ainsi de suite - peuvent être documentés à l'aide de notes d'événements. Chaque événement d'une inscription peut avoir son propre récit ou ses propres notes. Il est alors possible d'enregistrer, par exemple, une observation générale de ces événements à l'aide de la note d'inscription racine. Les notes d'inscription permettent également de documenter, par exemple, les raisons pour lesquelles une inscription est annulée. C'est à l'utilisateur de faire preuve d'imagination et de déterminer quand et comment utiliser les notes.
L'inscription et l'événement peuvent avoir autant de notes que nécessaire - il n'y a pas de limite. Toutefois, ces notes ne peuvent ni être supprimées ni être mises à jour. Elles servent en quelque sorte de journal de bord. Pour modifier une note, il faut en créer une autre. La seule façon de supprimer une note est de supprimer l'objet racine, à savoir l'événement ou l'inscription.
Les notes n'ont pas de point d'extrémité qui leur soit dédié. Elles sont échangées dans la charge de l'événement racine et/ou de l'inscription. Vous trouverez ci-dessous un exemple de charge.
{
"trackedEntity": "oi3PMIGYJH8",
"enrollments": [
{
"enrollment": "EbRsJr8LSSO",
"notes": [
{
"note": "vxmCvYcPdaW",
"value": "Enrollment note 2."
},
{
"value": "Enrollment note 1"
}
],
"events": [
{
"event": "zfzS9WeO0uM",
"notes": [
{
"note": "MAQFb7fAggS",
"value": "Event Note 1."
},
{
"value": "Event Note 2."
}
]
}
]
}
]
}
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| note | La référence de la note. Elle est générée si rien n'est fourni | Non | Oui | Chaîne : Uid | ABCDEF12345 |
| valeur | Le contenu de la note. | Oui | Oui | Chaîne : Toute | Ceci est une note |
| Stocké à | Date et heure à laquelle l'utilisateur a ajouté la note. Elle est définie sur le serveur. | Non | Oui | Date : ISO 8601 | AAAA-MM-JJThh:mm:ss |
| storedBy (Stockée par) | Client reference for who stored/created the note. Set on the server. | Non | Oui | Chaîne : Toute | John Doe |
| createdBy (créé par) | Uniquement pour lire des données. Il s'agit de l'utilisateur qui a créé l'objet. Défini sur le serveur | Non | Oui | Utilisateur | { "uid": "ABCDEF12345", "Nom d'utilisateur": "Nom d'utilisateur", "Prénom": "John", "Nom de famille": "Doe" } |
Utilisateurs¶
| Propriété | Description ; | Obligatoire | Immuable | Type | Exemple |
|---|---|---|---|---|---|
| uid | L'identifiant de l'utilisateur. | Oui* | Oui | Chaîne : Uid | ABCDEF12345 |
| Nom d'utilisateur | Le nom d'utilisateur utilisé par l'utilisateur. | Oui* | Oui | Chaîne : Toute | 123 |
| Prénom | Uniquement pour lire les données. Il s'agit du prénom de l'utilisateur. | Non | Oui | Chaîne : Toute | John |
| Nom de famille | Uniquement pour lire les données. Il s'agit du nom de famille de l'utilisateur. | Non | Oui | Chaîne : Toute | Doe |
L'
uidou lenom d'utilisateurdoit être fourni. Si les deux sont fournis, seul le nom d’utilisateur est pris en compte.
Listes des tâches de l'étape de programme¶
La fonctionnalité "Listes des tâches de l'étape de programme" de l'application Saisie est conçue pour afficher des listes de tâches préétablies correspondant à une étape de programme spécifique. Cette fonctionnalité permet aux utilisateurs de sauvegarder des filtres et des préférences de tri liés aux étapes de programme, ce qui facilite l'organisation et la gestion de leur flux de travail. Pour interagir avec ces listes, vous devez utiliser la ressource /api/programStageWorkingLists. Ces listes peuvent être partagées et elles respectent le même modèle de partage que n'importe quelle autre métadonnée. Lors de l'utilisation de la ressource /api/sharing, le paramètre type sera programStageWorkingLists.
/api/40/programStageWorkingLists
Charge utile pour les opérations CRUD sur les listes de tâches des étapes de programme{ #payload-on-crud-operations-to-program-stage-working-lists }¶
Le endpoint ci-dessus peut être utilisé pour obtenir toutes les listes de tâches des étapes de programme. Pour en obtenir une seule, il suffit d'ajouter à la fin l'identifiant de celle qui vous intéresse. Il en va de même si vous voulez la supprimer. D'autre part, si vous voulez créer ou mettre à jour une liste de tâches d'une étape de programme, en plus du endpoint mentionné ci-dessus, il vous faudra fournir une charge dans le format suivant :
Tableau : Charge
| Valeurs de la charge | Description ; | Exemple |
|---|---|---|
| nom | Nom de la liste de tâches. Obligatoire. | |
| Description | Il s'agit d'une description de la liste de tâches. | |
| programme | Objet contenant l'identifiant du programme. Obligatoire. | {"id" : "uy2gU8kTjF"} |
| Étape du programme | Objet contenant l'identifiant de l'étape de programme. Obligatoire. | {"id" : "oRySG82BKE6"} |
| programStageQueryCriteria (Critères de requête de l'étape de programme) | Un objet représentant diverses valeurs de filtrage possibles. Voir le tableau de définition des Critères de requête de l'étape de programme ci-dessous. |
Tableau : Critères de requête de l'étape de programme
| Valeurs des critères | Description ; | Exemple |
|---|---|---|
| statut | Il s'agit du statut de l'événement. Les valeurs possibles sont ACTIF, EFFECTUÉ, VISITÉ, PROGRAMMÉ, EN RETARD, SAUTÉ et VISITÉ. | "statut": "VISITÉ" |
| Évènement créé à | L'objet "Période de filtrage des dates" effectue le filtrage sur la base de la date de création de l'événement. | {"type":"ABSOLUTE","startDate":"2020-03-01","endDate":"2022-12-30"} |
| scheduledAt (programmé à) | L'objet "Période de filtrage des dates" effectue le filtrage sur la base de la date de programmation de l'événement. | {"type":"RELATIVE","period":"TODAY"} |
| Statut de l'inscription | Tout statut de programme valide. Les valeurs possibles sont ACTIF, EFFECTUÉ et ANNULÉ. | "Statut de l'inscription": "EFFECTUÉ" |
| Suivi | Indique s'il faut filtrer ou non les inscriptions marquées pour le suivi | "suivi": vrai |
| inscrit à | L'objet "Période de filtrage des dates" effectue le filtrage sur la base de la date d'inscription de l'événement. | "enrolledAt": {"type":"RELATIVE","period":"THIS_MONTH"} |
| Inscription effectué à | L'objet "Période de filtrage des dates" effectue le filtrage sur la base de la date à laquelle l'événement s'est produit. | {"type":"RELATIVE","period":"THIS_MONTH"} |
| orgUnit (Unité d'organisation) | Un UID d'unité d'organisation valide | "orgUnit": "Rp268JB6Ne4" |
| ouMode (Mode d'unité d'organisation) | Un mode de sélection d'unités d'organisation valide | "ouMode": "SELECTED" |
| Mode d'utilisateur assigné | Il s'agit d'un mode de sélection d'utilisateur valide pour les événements. Les valeurs possibles sont ACTUEL, FOURNI, AUCUN, TOUT et TOUS. S’il est FOURNI (ou nul), il sera attendu dans la charge utile des utilisateurs assignés non vides. | "Mode d'utilisateur assigné" : "FOURNI" |
| assignedUser (Utilisateur assigné) | Une liste des utilisateurs assignés aux événements. À utiliser avec le mode d'utilisateur assigné, fourni ci-dessus. | "Utilisateurs assignés":["DXyJmlo9rge"] |
| Ordre | Liste des champs et de leurs directions en valeurs séparées par des virgules, les résultats seront triés en fonction de cette liste. Un seul élément dans l'ordre est de la forme « orderDimension:direction ». | "ordre": "w75KJ2mc4zz:asc" |
| Ordre d'affichage des colonnes | Ordre de sortie des colonnes | "Ordre de sortie des colonnes":["w75KJ2mc4zz","zDhUuAYrxNC"] |
| Filtres de données | Une liste d'éléments contenant les filtres à utiliser lors de requêtes d'événements | "Filtres de données":[{"dataItem": "GXNUsigphqK","ge": "10","le": "20"}] |
| Filtres des valeurs d'attributs | Une liste de filtres de valeurs d'attribut. Elle est utilisée pour définir des filtres pour les valeurs d'attributs lors de l'établissement de la liste des entités suivies. | "Filtres de valeurs d'attribut":[{"attribute": "ruQQnf6rswq","eq": "15"}] |
Ci-dessous, un exemple de charge :
{
"name":"Test WL",
"program":{"id":"uy2gU8kT1jF"},
"programStage":{"id":"oRySG82BKE6"},
"description": "Test WL definition",
"programStageQueryCriteria":
{
"status":"VISITED",
"eventCreatedAt":{"type":"ABSOLUTE","startDate":"2020-03-01","endDate":"2022-12-30"},
"scheduledAt": {"type":"RELATIVE","period":"TODAY"},
"enrollmentStatus": "COMPLETED",
"followUp" : true,
"enrolledAt": {"type":"RELATIVE","period":"THIS_MONTH"},
"enrollmentOccurredAt": {"type":"RELATIVE","period":"THIS_MONTH"},
"orgUnit": "Rp268JB6Ne4",
"ouMode": "SELECTED",
"assignedUserMode":"PROVIDED",
"assignedUsers":["DXyJmlo9rge"],
"order": "w75KJ2mc4zz:asc",
"displayColumnOrder":["w75KJ2mc4zz","zDhUuAYrxNC"],
"dataFilters":[{
"dataItem": "GXNUsigphqK",
"ge": "10",
"le": "20"
}],
"attributeValueFilters":[{
"attribute": "ruQQnf6rswq",
"eq": "15"
}]
}
}
Importation Tracker (POST /api/tracker)¶
Le endpoint POST /api/tracker permet aux clients d'importer les objets Tracker suivants
- Entités suivies
- Inscriptions
- Événements
- Relations
- Données intégrées dans d'autres objets Tracker
Paramètres de requête¶
Actuellement, le point d'extrémité de l'importation Tracker prend en charge les paramètres suivants :
| Nom du paramètre | Description ; | Type | Valeurs autorisées |
|---|---|---|---|
| async | Indique si l’importation doit avoir lieu de manière asynchrone ou synchrone. | Booléen | true, false |
| Mode de rapport | Uniquement lors d'une importation synchrone. Voir le "Récapitulatif de l'importation" pour plus d’informations. | Énumération | COMPLET, ERREURS, AVERTISSEMENTS |
| Mode d'importation | Peut être soit VALIDATE qui rapportera les erreurs dans la charge sans faire de changements dans la base de données, soit COMMIT (par défaut) qui validera la charge et fera des changements dans la base de données. | Énumération | VALIDER, COMMITER |
| idScheme (schéma d'identifiants) | Indique le 'schéma d'identification' global à utiliser pour les références de métadonnées lors de l'importation. La valeur par défaut est UID. Elle peut être remplacée pour des métadonnées spécifiques (voir la liste ci-dessous). | Énumération | UID, CODE, NOM, ATTRIBUT |
| dataElementIdScheme (Schéma d'identification de l'élément de données) | Indique le schéma d'identification à utiliser pour les éléments de données lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| orgUnitIdScheme (Schéma de l'identifiant de l'unité d'organisation) | Indique le schéma d'identification à utiliser pour les unités d'organisation lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| programIdScheme (Schéma d'identification des programmes) | Indique le schéma d'identification à utiliser pour les programmes lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| programmeStageIdScheme (Schéma d'identification des étapes de programme) | Indique le schéma d'identification à utiliser pour les étapes de programme lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| categoryOptionComboIdScheme (Schéma d'identification des combinaisons d'options de catégorie) | Indique le schéma d'identification à utiliser pour les combinaisons d'options de catégorie lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| categoryOptionIdScheme (Schéma d'identification des options de catégorie) | Indique le schéma d'identification à utiliser pour les options de catégorie lors de l'importation. | Énumération | UID, CODE, NOM, ATTRIBUT |
| importStrategy (stratégie d'importation) | Indique l'effet que l'importation doit avoir. Les différentes possibilités sont CRÉER, METTRE À JOUR, CRÉER_ET_METTRE À JOUR et SUPPRIMER. Respectivement, elles permettent d'importer de nouvelles données, d'importer des modifications à des données existantes, d'importer de nouvelles données ou des mises à jour à des données existantes et, enfin, de supprimer des données. | Énumération | CRÉER, METTRE À JOUR, CRÉER_ET_METTRE À JOUR et SUPPRIMER |
| Mode atomique | Indique comment l'importation répond aux erreurs de validation. S'il est défini sur TOUS, toutes les données importées doivent être valides avant que chaque donnée ne soit commitée. Par contre s'il est défini sur OBJET, seules les données commitées doivent être valides, tandis que d'autres données peuvent être invalides. | Énumération | TOUS, OBJET |
| flushMode (mode de vidage) | Indique la fréquence de vidange. Il s'agit de la fréquence à laquelle les données sont introduites dans la base de données au cours de l'importation. Il est principalement utilisé à des fins de débogage et ne doit pas être modifié dans un environnement de production. | Énumération | AUTO, OBJET |
| Mode de validation | Indique l'intégralité de l'étape de validation. Il peut être sauté, configuré pour échouer rapidement (retour à la première erreur) ou complet (par défaut), ce qui renverra toutes les erreurs trouvées. | Énumération | COMPLET, ÉCHOUER_RAPIDEMENT, SAUTER |
| Validation du modèle de saut | S'il est défini sur 'vrai', la validation du modèle des attributs générés sera sautée. | Booléen | true, false |
| Sauter les effets secondaires | Si défini sur 'vrai', les effets secondaires de l'importation seront ignorés. | Booléen | true, false |
| Sauter les règles | Si défini sur 'vrai', l'exécution des règles de programme pour l'importation sera ignorée. | Booléen | true, false |
REMARQUE : Le schéma d'identification (idScheme) et ses paramètres spécifiques aux métadonnées comme 'schéma d'unité d'organisation' (orgUnitIdScheme), 'schéma d'identification de programme' (programIdScheme), etc. permettaient d'autoriser et d'utiliser le paramètre par défaut AUTO. AUTO a été supprimé. UID est déjà le schéma d'identification par défaut. Toutes les requêtes envoyées avec le schéma d'identification AUTO se comporteront de la même manière qu'auparavant, c'est à dire que la correspondance sera faite en utilisant UID.
Charges plates et imbriquées¶
L'importateur prend en charge les charges plates et imbriquées.
- Charge Plate
- La charge plate peut contenir des collections pour chacun des principaux objets de suivi que nous avons au
- niveau supérieur. Cela fonctionne de manière transparente avec les données existantes, auxquelles des UID sont déjà attribués. Cependant,
- pour les nouvelles données, le client devra fournir de nouveaux UID pour toutes les références entre les objets. Par
- exemple, si vous importez une nouvelle entité suivie avec une nouvelle inscription, l'entité suivie demande
- au client de fournir un UID afin que l'inscription puisse être reliée à cet UID.
- Charge imbriquée
- Les charges imbriquées sont la structure la plus couramment utilisée. Ici, les objets Tracker sont intégrés dans
- leur objet racine - par exemple, une inscription dans une entité suivie. L'avantage de cette
- structure est que le client n'a pas besoin de fournir d'UID pour ces références, car cela se fait
- automatiquement.
REMARQUE
Même si les charges imbriquées peuvent s'avérer plus simples à gérer pour les clients, elles seront toujours aplaties avant l'importation. Cela signifie que pour les importations volumineuses, le fait de fournir une charge plate permettra non seulement d'avoir plus de contrôle mais aussi moins de surcharge sur le processus d'importation.
Ci-dessous, des exemples de versions PLATES et IMBRIQUÉES de la charge utile.
Charge utile PLATE¶
{
"trackedEntities": [
{
"orgUnit": "y77LiPqLMoq",
"trackedEntity": "Kj6vYde4LHh",
"trackedEntityType": "nEenWmSyUEp"
},
{
"orgUnit": "y77LiPqLMoq",
"trackedEntity": "Gjaiu3ea38E",
"trackedEntityType": "nEenWmSyUEp"
}
],
"enrollments": [
{
"enrolledAt": "2019-08-19T00:00:00.000",
"enrollment": "MNWZ6hnuhSw",
"occurredAt": "2019-08-19T00:00:00.000",
"orgUnit": "y77LiPqLMoq",
"program": "IpHINAT79UW",
"status": "ACTIVE",
"trackedEntity": "Kj6vYde4LHh",
"trackedEntityType": "nEenWmSyUEp"
}
],
"events": [
{
"attributeCategoryOptions": "xYerKDKCefk",
"attributeOptionCombo": "HllvX50cXC0",
"dataValues": [
{
"dataElement": "bx6fsa0t90x",
"value": "true"
},
{
"dataElement": "UXz7xuGCEhU",
"value": "5.7"
}
],
"enrollment": "MNWZ6hnuhSw",
"enrollmentStatus": "ACTIVE",
"event": "ZwwuwNp6gVd",
"occurredAt": "2019-08-01T00:00:00.000",
"orgUnit": "y77LiPqLMoq",
"program": "IpHINAT79UW",
"programStage": "A03MvHHogjR",
"scheduledAt": "2019-08-19T13:59:13.688",
"status": "ACTIVE",
"trackedEntity": "Kj6vYde4LHh"
},
{
"attributeCategoryOptions": "xYerKDKCefk",
"attributeOptionCombo": "HllvX50cXC0",
"enrollment": "MNWZ6hnuhSw",
"enrollmentStatus": "ACTIVE",
"event": "XwwuwNp6gVE",
"occurredAt": "2019-08-01T00:00:00.000",
"orgUnit": "y77LiPqLMoq",
"program": "IpHINAT79UW",
"programStage": "ZzYYXq4fJie",
"scheduledAt": "2019-08-19T13:59:13.688",
"status": "ACTIVE",
"trackedEntity": "Kj6vYde4LHh"
}
],
"relationships": [
{
"from": {
"trackedEntity": {
"trackedEntity": "Kj6vYde4LHh"
}
},
"relationshipType": "dDrh5UyCyvQ",
"to": {
"trackedEntity": {
"trackedEntity": "Gjaiu3ea38E"
}
}
}
]
}
Charge utile IMBRIQUÉES¶
{
"trackedEntities": [
{
"enrollments": [
{
"attributes": [
{
"attribute": "zDhUuAYrxNC",
"displayName": "Last name",
"value": "Kelly"
},
{
"attribute": "w75KJ2mc4zz",
"displayName": "First name",
"value": "John"
}
],
"enrolledAt": "2019-08-19T00:00:00.000",
"events": [
{
"attributeCategoryOptions": "xYerKDKCefk",
"attributeOptionCombo": "HllvX50cXC0",
"dataValues": [
{
"dataElement": "bx6fsa0t90x",
"value": "true"
},
{
"dataElement": "UXz7xuGCEhU",
"value": "5.7"
}
],
"enrollmentStatus": "ACTIVE",
"notes": [
{
"value": "need to follow up"
}
],
"occurredAt": "2019-08-01T00:00:00.000",
"orgUnit": "y77LiPqLMoq",
"program": "IpHINAT79UW",
"programStage": "A03MvHHogjR",
"scheduledAt": "2019-08-19T13:59:13.688",
"status": "ACTIVE"
}
],
"occurredAt": "2019-08-19T00:00:00.000",
"orgUnit": "y77LiPqLMoq",
"program": "IpHINAT79UW",
"status": "ACTIVE",
"trackedEntityType": "nEenWmSyUEp"
}
],
"orgUnit": "y77LiPqLMoq",
"trackedEntityType": "nEenWmSyUEp"
}
]
}
SYNC et ASYNC¶
Pour l'utilisateur, la principale différence entre une importation synchrone et une importation asynchrone est la réponse immédiate de l'API. Dans le cas d'une importation synchrone, la réponse sera renvoyée avec le récapitulatif de l'importation (importSummary) dès que l'importation sera terminée. En revanche, pour les importations asynchrones, la réponse sera immédiate et contiendra une référence à travers laquelle le client pourra demander des mises à jour de l'importation.
Dans le cadre des importations importantes, il peut être avantageux pour le client d'utiliser l'importation asynchrone afin de ne pas attendre trop longtemps une réponse.
Des exemples de réponse ASYNC sont présentés ci-dessous. Pour la réponse SYNC, consultez la section Récapitulatif d'importation.
{
"httpStatus": "OK",
"httpStatusCode": 200,
"status": "OK",
"message": "Tracker job added",
"response": {
"id": "cHh2OCTJvRw",
"location": "https://play.im.dhis2.org/dev/api/tracker/jobs/cHh2OCTJvRw"
}
}
Importation CSV¶
To import events using CSV make a POST request with CSV body file and the Content-Type set to application/csv or text/csv.
Événements¶
Every row of the CSV payload represents an event and a data value. So, for events with multiple data values, the CSV file will have x rows per event, where x is the number of data values in that event.
*** Exemple de charge utile CSV ***¶
Votre fichier CSV peut se présenter comme suit :
event,status,program,programStage,enrollment,orgUnit,occurredAt,scheduledAt,geometry,latitude,longitude,followUp,deleted,createdAt,createdAtClient,updatedAt,updatedAtClient,completedBy,completedAt,updatedBy,attributeOptionCombo,attributeCategoryOptions,assignedUser,dataElement,value,storedByDataValue,updatedAtDataValue,createdAtDataValue
A7rzcnZTe2T,ACTIVE,eBAyeGv0exc,Zj7UnCAulEk,RiLEKhWHlxZ,DwpbWkiqjMy,2023-02-12T23:00:00Z,2023-02-12T23:00:00Z,"POINT (-11.468912037323042 7.515913998868316)",7.515913998868316,-11.468912037323042,false,false,2017-09-08T19:40:22Z,,2017-09-08T19:40:22Z,,,,,HllvX50cXC0,xYerKDKCefk,,F3ogKBuviRA,"[-11.4880220438585,7.50978830548003]",false,,2016-12-06T17:22:34.438Z,2016-12-06T17:22:34.438Z
Voir Événements CSV dans la section relative à l'exportation pour une définition plus détaillée des champs CSV.
Récapitulatif des importations¶
L'API du Tracker dispose de deux endpoints de base qui permettent aux consommateurs d'obtenir des commentaires sur leurs importations. Ces endpoints concernent plus les tâches d'importation asynchrone, mais ils sont également disponibles pour les importations synchrones. Ces endpoints renverront soit le journal de l'importation, soit le récapitulatif de l'importation lui-même.
Remarque
Ces endpoints s'appuient sur des informations stockées dans la mémoire de l'application. Cela signifie que les informations seront indisponibles après certaines situations, telle qu'un redémarrage de l'application ou après un grand nombre de requêtes d'importation qui commencent après celle-ci.
Après avoir soumis une requête d'importation Tracker, nous pouvons accéder aux endpoints suivants afin de surveiller la progression de la tâche en fonction des journaux:
GET /tracker/jobs/{uid}
| Paramètre | Description ; | Exemple |
|---|---|---|
{uid} | L'UID d'une tâche d'importation Tracker existante | ABCDEF12345 |
exemple de REQUÊTE¶
GET /tracker/jobs/PQK63sMwjQp
Exemple de RÉPONSE¶
[
{
"uid": "PQK63sMwjQp",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.370",
"message": "Import complete with status OK, 0 created, 0 updated, 0 deleted, 0 ignored",
"completed": true,
"id": "PQK63sMwjQp"
},
{
"uid": "XIfTJ1UUNcd",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.369",
"message": "PostCommit",
"completed": false,
"id": "XIfTJ1UUNcd"
},
{
"uid": "uCG4FNJLLBJ",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.364",
"message": "Commit Transaction",
"completed": false,
"id": "uCG4FNJLLBJ"
},
{
"uid": "xfOUv2Lk2MC",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.361",
"message": "Running Rule Engine Validation",
"completed": false,
"id": "xfOUv2Lk2MC"
},
{
"uid": "cSPfA776obb",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.325",
"message": "Running Rule Engine",
"completed": false,
"id": "cSPfA776obb"
},
{
"uid": "mru3HJrFGKA",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.313",
"message": "Running Validation",
"completed": false,
"id": "mru3HJrFGKA"
},
{
"uid": "oTbCUJ2RnA6",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.312",
"message": "Running PreProcess",
"completed": false,
"id": "oTbCUJ2RnA6"
},
{
"uid": "lcUNbWTn6uh",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:16.312",
"message": "Calculating Payload Size",
"completed": false,
"id": "lcUNbWTn6uh"
},
{
"uid": "l4jQiSS9qdK",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:15.903",
"message": "Running PreHeat",
"completed": false,
"id": "l4jQiSS9qdK"
},
{
"uid": "qGbiuqgwPX5",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:15.850",
"message": "Loading file content",
"completed": false,
"id": "qGbiuqgwPX5"
},
{
"uid": "eWNHzVf7iAj",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:15.838",
"message": "Loading file resource",
"completed": false,
"id": "eWNHzVf7iAj"
},
{
"uid": "t9gOjotekQt",
"level": "INFO",
"category": "TRACKER_IMPORT_JOB",
"time": "2024-03-19T13:18:15.837",
"message": "Tracker import started",
"completed": false,
"dataType": "PARAMETERS",
"data": {
"userId": "xE7jOejl9FI",
"importMode": "VALIDATE",
"idSchemes": {
"dataElementIdScheme": {
"idScheme": "UID",
"attributeUid": null
},
"orgUnitIdScheme": {
"idScheme": "UID",
"attributeUid": null
},
"programIdScheme": {
"idScheme": "UID",
"attributeUid": null
},
"programStageIdScheme": {
"idScheme": "UID",
"attributeUid": null
},
"idScheme": {
"idScheme": "UID",
"attributeUid": null
},
"categoryOptionComboIdScheme": {
"idScheme": "UID",
"attributeUid": null
},
"categoryOptionIdScheme": {
"idScheme": "UID",
"attributeUid": null
}
},
"importStrategy": "CREATE_AND_UPDATE",
"atomicMode": "ALL",
"flushMode": "AUTO",
"validationMode": "FULL",
"skipPatternValidation": false,
"skipSideEffects": false,
"skipRuleEngine": false,
"filename": null,
"reportMode": "ERRORS"
},
"id": "t9gOjotekQt"
}
]
De plus, le endpoint suivant renverra le récapitulatif de la tâche d’importation. Ce récapitulatif ne sera disponible qu'une fois l'importation terminée:
GET /tracker/jobs/{uid}/report
| Paramètre | Description ; | Exemple |
|---|---|---|
path /{uid} | L'UID d'une tâche d'importation Tracker existante. | ABCDEF12345 |
reportMode (Mode de rapport) | Le niveau de détail du rapport. | COMPLET|ERREURS|AVERTISSEMENT |
exemple de REQUÊTE¶
GET /tracker/jobs/mEfEaFSCKCC/report
Exemple de RÉPONSE¶
La charge de la réponse est la même que celle renvoyée après une requête d'importation synchrone.
Remarque
Les deux endpoints sont principalement utilisés pour l'importation asynchrone. Cependant,
GET /tracker/jobs/{uid}devrait également fonctionner pour les requêtes synchrones car au final il utilise le même processus d'importation et la même journalisation que les requêtes asynchrones.
Structure du récapitulatif d'importation¶
La structure globale des récapitulatifs d'importation se présente comme suit, en fonction du mode de rapport faisant l'objet de la requête :
{
"status": "OK",
"validationReport": {
"errorReports": [],
"warningReports": []
},
"stats": {
"created": 3,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 3
},
"bundleReport": {
"typeReportMap": {
"EVENT": {
"trackerType": "EVENT",
"stats": {
"created": 1,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 1
},
"objectReports": [
{
"trackerType": "EVENT",
"uid": "gTZBPT3Jq39",
"errorReports": []
}
]
},
"ENROLLMENT": {
"trackerType": "ENROLLMENT",
"stats": {
"created": 1,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 1
},
"objectReports": [
{
"trackerType": "ENROLLMENT",
"uid": "ffcvJvWjiNZ",
"errorReports": []
}
]
},
"RELATIONSHIP": {
"trackerType": "RELATIONSHIP",
"stats": {
"created": 0,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 0
},
"objectReports": []
},
"TRACKED_ENTITY": {
"trackerType": "TRACKED_ENTITY",
"stats": {
"created": 1,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 1
},
"objectReports": [
{
"trackerType": "TRACKED_ENTITY",
"uid": "aVcGf9iO8Xp",
"errorReports": []
}
]
}
}
}
}
statut
La propriété statut du récapitulatif d'importation indique l'état global de l'importation. Si aucune erreur ou avertissement n'est signalé(e) lors de l'importation, le statut est OK. Par contre, si une erreur ou un avertissement est signalé(e) lors de l'importation, le statut devient ERREUR ou AVERTISSEMENT.
Le statut dépend de la présence du Rapport de validation le plus important. ERREUR est le plus important, suivi de AVERTISSEMENT et enfin OK. Cela signifie que le statut est ERREUR si une seule erreur est détectée lors de l'importation, quel que soit le nombre d'avertissements.
Remarque
Si l'importation est faite selon le mode atomique "OBJET", où les données sont importées sans erreurs de validation, le statut sera toujours
ERREURsi des erreurs sont détectées.
Rapport de validation
Le Rapport de validation peut inclure des Rapports d'erreur et des Rapports d'avertissement si des erreurs ou des avertissements étaient présents lors de l'importation. Lorsqu'ils sont présents, ils fournissent une liste détaillée des erreurs ou avertissements rencontrés.
Prenons l'exemple d'une erreur de validation lors de l'importation d'une ENTIÉE_SUIVIE :
{
"validationReport": {
"errorReports": [
{
"message": "Could not find TrackedEntityType: `Q9GufDoplCL`.",
"errorCode": "E1005",
"trackerType": "TRACKED_ENTITY",
"uid": "Kj6vYde4LHh"
},
...
],
"warningReports" : [ ... ]
}
}
Le rapport contient un message et un code décrivant l'erreur (voir la section [codes d'erreur] (#error-codes) pour plus d'informations sur les erreurs). Il contient également le type de tracker et l'uid, lesquels permettent d'identifier l'emplacement de l'erreur dans les données. Dans ce cas, il y avait une ENTITÉ_SUIVIE avec l'uid Kj6vYde4LHh qui renvoyait à un type d'entité suivi qui n'a pas été trouvé.
Remarque
Les
uiddes objets trackers servent de noms à ces objets dans la charge. Par exemple, l'uidd'une entité suivie dans la charge serait "trackedEntity". La même chose s'applique aux inscriptions, aux événements et aux relations qui portent respectivement les noms "enrollment", "event" et "relationship".Si aucun uid n'est fourni dans la charge, le processus d'importation générera de nouveaux uids. Cela signifie que le rapport d'erreur peut faire référence à un uid qui n'existe pas dans votre charge.
Les erreurs signalent des problèmes avec la charge que l'importateur ne peut pas contourner. Toute erreur empêchera l'importation de ces données. Les avertissements, en revanche, sont des problèmes qui peuvent être contournés en toute sécurité, mais dont l'utilisateur doit être informé. Les avertissements ne bloquent pas l'importation des données.
Statistiques
Les statistiques donnent un aperçu rapide de l'importation. Une fois l'importation terminée, ces statistiques indiqueront la quantité de données créées, mises à jour, supprimées ou ignorées.
Exemple:
{
"stats": {
"created": 2,
"updated": 2,
"deleted": 1,
"ignored": 5,
"total": 10
}
}
created fait référence au nombre de nouveaux objets créés. En général, les objets sans UID présents dans la charge seront considérés comme de nouveaux objets.
updated fait référence au nombre d'objets mis à jour. Si un objet a un UID défini dans la charge, il sera considéré comme étant à jour tant que ce même UID se trouve dans la base de données.
deleted fait référence au nombre d'objets supprimés lors de l'importation. La suppression ne se produit que lorsque l'importation est configurée pour supprimer des données et uniquement lorsque les objets présents dans la charge ont des UID définis.
ignored fait référence aux objets qui n'ont pas été conservés. Les objets peuvent être ignorés pour plusieurs raisons, par exemple pour éviter de créer un objet qui existe déjà. Ignorer des objets ne pose pas de réel problème, car si un objet est ignoré, c'est parce que sa création n'était pas nécessaire ou cela lié à la configuration de l'importation.
bundleRapport (Rapport d'ensemble)
Une fois l'importation terminée, le bundleReport contient tous les objets tracker importés.
Prenons en exemple l'ENTITÉ_SUIVIE :
{
"bundleReport": {
"typeReportMap": {
"TRACKED_ENTITY": {
"trackerType": "TRACKED_ENTITY",
"stats": {
"created": 1,
"updated": 0,
"deleted": 0,
"ignored": 0,
"total": 1
},
"objectReports": [
{
"trackerType": "TRACKED_ENTITY",
"uid": "aVcGf9iO8Xp",
"errorReports": []
}
]
}
}
}
}
Comme nous l'avons vu, chaque type d'objet Tracker sera rapporté, et chacun a ses propres statistiques et objectReports(rapports d'objets). Ces rapports d'objets fourniront des détails sur chaque objet importé, notamment son type, son UID et tout rapport d'erreur ou d'avertissement qui le concerne.
message
Si l'importation se termine brusquement, le message va contenir des informations supplémentaires sur ce qui s'est passé.
Niveau du rapport récapitulatif de l'importation¶
Comme indiqué précédemment, GET /tracker/jobs/{uid}/report peut être récupéré à l'aide d'un paramètre reportMode spécifique. Par défaut, le endpoint renverra un importSummary avec pour reportMode ERREUR.
| Paramètre | Description ; |
|---|---|
COMPLET | Renvoie tout à partir de AVERTISSEMENTS, en plus des timingsStats |
AVERTISSEMENTS | Renvoie tout à partir de ERREURS, en plus de warningReports (rapports d'avertissements) dans validationReports (rapports de validation) |
ERREURS (par défaut) | Renvoie uniquement errorReports (rapports d'erreurs) dans validationReports |
De plus, tous les reportModes (modes de rapports) renverront statut, statistiques, bundleReport et message le cas échéant.
Codes d'erreur¶
Il existe plusieurs codes d'erreur pour différents scénarios d'erreur. Le tableau suivant contient la liste des codes d'erreur générés par la nouvelle API du Tracker, ainsi que les messages d'erreur et quelques descriptions supplémentaires. Les espaces réservés dans les messages d'erreur ({0}, {1}, {2}..) sont généralement des uids, sauf indication contraire.
| Code d'erreur | Message d'erreur | Description ; |
|---|---|---|
| E1000 | L'utilisateur : {0} n'a pas d'accès en écriture sur l'unité d'organisation : {1}. | Cela signifie que l'unité d'organisation {1} ne fait pas partie du champ de saisie de l'utilisateur {0} pour que l'opération d'écriture soit autorisée. |
| E1001 | L'utilisateur : {0} n'a pas d'accès en écriture de données sur le Type d'entité suivie : {1}. | The error occurs when the user is not authorized to create or modify data of the TrackedEntityType {1} |
| E1002 | L'entité suivie {0} existe déjà. | Cette erreur se produit lorsque l'on essaie de créer une nouvelle entité suivie avec un uid déjà existant. Veillez à utiliser un nouvel uid lors de l'ajout d'une nouvelle entité suivie. |
| E1003 | User: {0}, has no write access to TrackedEntity: {1}. | |
| E1005 | Impossible de trouver le Type d'entité suivie : {0}. | L'erreur se produit lorsque l'on essaie de récupérer un Type d'entité suivie qui n'existe pas avec l'uid {0}. Cela peut également signifier que l'utilisateur n'a pas d'accès en lecture à ce Type d'entité suivie. |
| E1006 | L'attribut : {0} n'existe pas. | L'erreur se produit lorsque le système n'a pas pu trouver un attribut d'entité suivie correspondant avec l'uid {0}. Cela peut également signifier que l'utilisateur n'a pas accès à l'attribut d'entité suivie. |
| E1007 | Erreur de validation du type de valeur d'attribut : {0} ; Erreur : {1}. | Incompatibilité entre le type de valeur d'un attribut d'entité suivie et la valeur d'attribut qui lui est fournie. L'erreur de validation réelle sera affichée dans {1}. |
| E1008 | L'étape de programme {0} n'a pas de référence à un programme. Vérifiez la configuration de l'étape du programme | |
| E1009 | La ressource de fichier : {0} a déjà été attribuée à un autre objet. | L'uid de ressource de fichier {0} est déjà attribué à un autre objet du système. |
| E1010 | Impossible de trouver le programme : {0} lié à l'événement. | Le système n'a pas pu trouver un programme avec l'uid {0} spécifié dans la charge utile de l'événement. Cela peut également signifier que l'utilisateur connecté n'a pas accès à ce programme. |
| E1011 | Impossible de trouver l'unité d'organisation : {0} lié à l'événement. | Le système n'a pas pu trouver une unité d'organisation avec l'uid {0} spécifié dans la charge utile de l'événement. |
| E1012 | La géométrie n'est pas conforme au FeatureType (type de fonctionnalité) : {0}. | Le type de fonctionnalité fourni est soit NONE (aucun), soit incompatible avec la valeur géométrique fournie. |
| E1013 | Impossible de trouver le ProgramStage (étape de programme) : {0} lié à l'événement. | Le système n'a pas pu trouver une étape de programme avec l'uid {0} spécifié dans la charge utile de l'événement. Cela peut également signifier que l'utilisateur connecté n'a pas accès à l'étape de programme. |
| E1014 | Un programme identifié {0} est un programme sans enregistrement. Aucune inscription ne peut être créée dans un programme sans enregistrement. | Les inscriptions ne peuvent être créées que pour les programmes avec des enregistrements. |
| E1015 | L'entité suivie : {0} a déjà une inscription active dans le programme {1}. | Il est impossible de s'inscrire à un programme si une autre inscription active existe déjà pour le programme. L’inscription active devra au moins être terminée au préalable. |
| E1016 | L'entité suivie : {0} a déjà une inscription active dans le programme: {1}, et ce programme n'autorise qu'une seule inscription . | Conformément à la configuration du programme {1}, une entité suivie ne peut être inscrite qu'une seule fois à ce programme. Il semble que l'entité suivie {0} ait déjà une inscription ACTIVE ou TERMINÉE dans ce programme. Une autre inscription ne peut donc pas être ajoutée. |
| E1018 | L'attribut : {0} est obligatoire dans le programme {1} mais il n'est pas déclaré dans l'inscription {2}. | La valeur de l'attribut est manquante dans la charge utile, pour un attribut défini comme obligatoire pour un programme. Assurez-vous que les valeurs des attributs obligatoires sont fournies dans la charge utile. |
| E1019 | Seuls les attributs du programme sont autorisés pour l'inscription ; attributs non valides : {0}. | L'uid d'attribut {0} spécifié dans la charge utile d'inscription n'est pas associé au programme. |
| E1020 | La date d'inscription identifiée {0} ne peut pas être une date ultérieure.` | Il est impossible de créer une inscription à une date ultérieure à moins que le Programme ne le permette dans sa configuration. |
| E1021 | La date d'incidence identifiée {0} ne peut pas être une date ultérieure.` | La date d'incidence ne peut pas être une date ultérieure à moins que le Programme ne le permette dans sa configuration. |
| E1022 | L'entité suivie {0} doit avoir le même type d'entité suivie que le programme {1}. | Le programme est configuré pour accepter un UID de type d'entité suivie différent de celui fourni dans la charge utile d’inscription. |
| E1023 | La DisplayIncidentDate (date d'affichage de l'incident) est vraie mais la propriété occurredAt (survenu à) est nulle ou a un format invalide : {0}. | Le programme est configuré avec la date d'affichage de l'incident mais sa date est nulle ou invalide dans la charge utile. |
| E1025 | La propriété enrolledAt (inscrit à) est nulle ou a un format invalide : {0}. | La date d'inscription est obligatoire pour une inscription. Assurez-vous qu'il ne soit pas nul et qu'il ait un format de date valide. |
| E1029 | L'unité d'organisation Évènement identifiée {0} et le Programme {1} ne correspondent pas. | La charge utile de l'événement utilise un programme {1} qui n'est pas configuré pour être accessible par l'unité d'organisation {0}. |
| E1030 | L'Événement {0} existe déjà. | Cette erreur se produit lorsque l'on essaie d'ajouter un nouvel événement avec un uid déjà existant. Veillez à utiliser un nouvel uid lors de l'ajout d'un nouvel événement. |
| E1031 | Event occurredAt date is missing. | OccurredAt property is either null or has an invalidate date format in the payload. |
| E1032 | L'Événement {0} n'existe pas. | |
| E1033 | La valeur d'inscription de l'Événement {0} est NULLE. | |
| E1035 | La valeur d'inscription de l'Étape de programme {0} est NULLE. | |
| E1039 | L'Étape de programme {0} n'est pas répétable et un événement existe déjà. | Un événement existe déjà pour l'étape de programme de l’inscription. Étant donné que l'étape de programme est configuré pour être non répétable, un autre événement ne peut pas être ajouté pour la même étape de programme. |
| E1041 | L'unité d'organisation Inscription {0} et le Programme {1} ne correspondent pas. | La charge utile de l'inscription contient un programme {1} qui n'est pas configuré pour être accessible par l'unité d'organisation {0}. |
| E1042 | L'Événement {0} doit avoir une date de fin. | Si le programme est configuré pour avoir des completeExpiryDays (dates d'expiration complètes), alors la date de fin est obligatoire pour la charge utile d'un événement TERMINÉ. La propriété "completedDate" d'un événement dont le statut est "COMPLETED" (TERMINÉ) doit être non nulle et correspondre à un format de date valide. |
| E1043 | La date de fin de l'événement : {0}, a expiré ; il n'est donc plus possible d'apporter des modifications à cet événement. | Un utilisateur qui ne dispose pas de l'autorité 'F_EDIT_EXPIRED' ne peut pas mettre à jour un événement dont les jours d'expiration, tels que configurés dans son programme, sont dépassés. |
| E1046 | L'Événement : {0}, doit avoir au moins une date (d'événement ou de programmation). | La propriété occuredAt (survenu à) ou selectedAt (sélectionné à) doit figurer dans la charge utile de l’événement. |
| E1047 | La date de l'événement : {0}, appartient à une période expirée. Un tel événement ne peut être créé. | Les propriétés occuredAt et scheduledAt de l'événement ont une valeur antérieure à la date de début du type de période (PeriodType). |
| E1048 | L'objet : {0}, uid : {1}, a un format d'uid invalide. | Un uid valide comporte 11 caractères. Le premier caractère doit être une lettre de l'alphabet (a-z ou A-Z) et les 10 caractères restants peuvent être alphanumériques (a-z ou A-Z ou 0-9). |
| E1049 | Impossible de trouver l'unité d'organisation : {0} lié à l'entité suivie. | Le système n'a pas trouvé une Unité d'Organisation avec l'uid {0}. |
| E1050 | La date à laquelle l'événement est programmé (ScheduledAt) est manquante. | La propriété "ScheduledAt" dans la charge utile de l'événement est soit manquante, soit son format de date est invalide. |
| E1054 | La combinaison d'options d'attributs {0} n'est pas dans la combinaison de catégories de programmes d'événements {1}. | |
| E1055 | La combinaison d'options d'attribut (AttributeOptionCombo) par défaut n'est pas autorisée car le programme ne dispose pas d'une combinaison de catégories (CategoryCombo) par défaut. | Le programme est configuré pour contenir une combinaison de catégories différente de celle par défaut, mais la requête utilise la combinaison d'options d'attribut par défaut. |
| E1056 | La date d'événement : {0}, est antérieure à la date de début : {1}, pour l'option d'attribut (AttributeOption) : {2}. | L'option de catégorie a une date de début configurée ; la date de l'événement dans la charge utile ne peut pas être antérieure à cette date de début. |
| E1057 | La date d'événement : {0}, est postérieure à la date de fin : {1}, pour l'option d'attribut (AttributeOption) : {2}. | L'option de catégorie a une date de fin configurée ; la date de l'événement dans la charge utile ne peut pas être postérieure à cette date de fin. |
| E1063 | L'entité suivie {0} n'existe pas. | L'erreur se produit lorsque l'on essaie de récupérer une Entité suivie qui n'existe pas avec l'uid {0}. Cela peut également signifier que l'utilisateur n'a pas d'accès en lecture à cette Entité suivie. |
| E1064 | Valeur d'attribut non unique {0} pour l'attribut {1} | La valeur de l'attribut doit être unique dans le champ d'application défini. L'erreur indique que la valeur de l'attribut existe déjà pour une autre Entité suivie. |
| E1068 | Impossible de trouver l'entité suivie : {0}, lié à l'inscription. | Le système n'a pas pu trouver l'entité suivie spécifiée dans la charge utile d'inscription. Cela peut également signifier que l'utilisateur n'a pas d'accès en lecture à cette entité suivie. |
| E1069 | Impossible de trouver le programme : {0} lié à l'inscription. | Le système n'a pas pu trouver le programme spécifié dans la charge utile d'inscription. Cela peut également signifier que l'utilisateur n'a pas d'accès en lecture à ce programme. |
| E1070 | Impossible de trouver l'unité d'organisation : {0} lié à l'inscription. | Le système n'a pas pu trouver l'unité d'organisation spécifiée dans la charge utile d'inscription. |
| E1074 | FeatureType (Type de fonctionnalité) est manquant. | |
| E1075 | L'attribut : {0}, n'a pas d'uid. | |
| E1076 | {0} {1} est obligatoire et ne peut pas être nul | |
| E1077 | La valeur du texte de l'attribut : {0}, dépasse la longueur maximale autorisée : {0}. | |
| E1079 | Événement : {0}, le programme : {1} est différent du programme défini dans l'inscription {2}. | |
| E1080 | L'Inscription {0} existe déjà. | Cette erreur se produit lorsque l'on essaie de créer une nouvelle inscription avec un uid déjà existant. Veillez à utiliser un nouvel uid pour une nouvelle inscription. |
| E1081 | L'Inscription {0} n'existe pas. | L'erreur se produit lorsque l'on essaie de récupérer une Inscription qui n'existe pas avec l'uid {0}. Cela peut également signifier que l'utilisateur n'a pas d'accès en lecture à cette Inscription. |
| E1082 | L'Événement : {0}, est déjà supprimé et ne peut donc plus être modifié. | Si l’événement est supprimé de façon réversible (soft delete), aucune modification n’est autorisée sur cet événement. |
| E1083 | L'Utilisateur : {0}, n'est pas autorisé à modifier les événements terminés. | Seul un super utilisateur ou un utilisateur disposant de l'autorité "F_UNCOMPLETE_EVENT" peut modifier les événements terminés. Les événements terminés sont les événements dont le statut est "TERMINÉ". |
| E1084 | La référence de la ressource de fichier : {0}, est introuvable. | |
| E1085 | La valeur de l'Attribut : {0}, ne correspond pas au type de valeur : {1}. | Incompatibilité entre le type de valeur d'un attribut et la valeur d'attribut fournie. |
| E1089 | L'Événement : {0}, fait référence à une Étape de programme {1} qui n'appartient pas au Programme {2}. | L’uid de l'Étape de programme et l’uid de Programme présent dans la charge utile de l’Événement sont incompatibles. |
| E1090 | L'attribut : {0} est obligatoire dans le type d'entité suivie {1} mais il n'est pas déclaré dans l'entité suivie {2}. | Des valeurs manquent dans la charge utile pour les attributs de type d'entité suivie obligatoires. |
| E1091 | L'utilisateur : {0} n'a pas d'accès en écriture de données sur le Programme : {1}. | La configuration du partage du Programme est telle que l'utilisateur n'a pas d'accès en écriture pour ce programme. |
| E1095 | L'utilisateur : {0} n'a pas d'accès en écriture de données sur l'Étape de programme : {1}. | La configuration du partage de l'Étape de programme est telle que l'utilisateur n'a pas d'accès en écriture pour cette Étape de programme. |
| E1096 | L'utilisateur : {0} n'a pas d'accès en lecture de données sur le Programme : {1}. | La configuration du partage du Programme est telle que l'utilisateur n'a pas d'accès en lecture pour ce programme. |
| E1099 | L'utilisateur : {0} n'a pas d'accès en écriture sur l'Option de catégorie : {1}. | La configuration du partage de l'Option de catégorie est telle que l'utilisateur n'a pas d'accès en écriture pour cette Option de catégorie. |
| E1100 | L'Utilisateur: {0}, ne dispose pas de l'autorité 'F_TEI_CASCADE_DELETE' pour supprimer l'entité suivie : {1}. | Certaines Inscriptions n'ont pas été supprimées pour cette Entité suivie. Si l'utilisateur ne dispose pas de l'autorité "F_TEI_CASCADE_DELETE", ces inscriptions devront d'abord être supprimées explicitement avant qu'il puisse supprimer l'Entité suivie. |
| E1102 | L'Utilisateur : {0}, n'a pas accès à la combinaison de l'Entité suivie : {1} et du Programme : {2}. | Cette erreur se produit lorsque l'unité d'organisation de l'utilisateur ne possède pas cette entité suivie, pour ce programme spécifique. L'unité d'organisation propriétaire de la combinaison Entité Suivie-Programme (TrackedEntity-Program) doit se trouver dans le champ de saisie (dans certains cas, dans le champ de recherche) de l'utilisateur. |
| E1103 | L'Utilisateur : {0}, ne dispose pas de l'autorité 'F_ENROLLMENT_CASCADE_DELETE' pour supprimer l'Inscription : {1}. | Certains Événements n'ont pas été supprimées pour cette Inscription. Si l'utilisateur ne dispose pas de l'autorité 'F_ENROLLMENT_CASCADE_DELETE', ces Événements devront d'abord être supprimées explicitement avant qu'il puisse supprimer l'Inscription. |
| E1104 | L'utilisateur : {0} n'a pas d'accès en lecture de données sur le programme : {1} et le type d'entité suivie : {2}. | La configuration du partage du Type d'entité suivie associé au Programme est telle que l'utilisateur n'a pas d'accès en lecture de données pour ce type d'entité suivie. |
| E1112 | La Valeur d'attribut : {0}, est définie sur 'confidentiel' mais le système n'est pas correctement configuré pour crypter les données. | Soit les fichiers JCE sont manquants, soit la propriété de configuration encryption.password peut être manquante dans dhis.conf. |
| E1113 | L'Inscription : {0}, est déjà supprimée et ne peut donc plus être modifiée. | Si l'inscription est supprimée de façon réversible, aucune modification n’est autorisée sur cette inscription. |
| E1114 | L'Entité suivie : {0}, est déjà supprimée et ne peut donc plus être modifiée. | Si l'entité suivie est supprimée de façon réversible, aucune modification n’est autorisée sur cette entité suivie. |
| E1115 | Impossible de trouver la Combinaison d'options de catégorie : {0}. | |
| E1116 | Impossible de trouver la l'Option de catégorie : {0}. | Cela peut également signifier que l'utilisateur n'a pas accès à cette option de catégorie. |
| E1117 | La Combinaison d'options de catégorie n'existe pas pour la combinaison de catégories et les options de catégorie fournies : {0}. | |
| E1118 | L'utilisateur assigné {0} n'est pas un uid valide. | |
| E1119 | Une note de Tracker avec l'uid {0} existe déjà. | |
| E1120 | L'Étape de programme {0} n'autorise pas l'assignation d'utilisateurs | La charge utile d'événement a attribué un identifiant d'utilisateur (uid) mais l'étape de programme n’est pas configurée pour autoriser l'assignation d’utilisateurs. |
| E1121 | La propriété d'entité suivie requise est manquante : {0}. | |
| E1122 | La propriété d'inscription requise est manquante : {0}. | |
| E1123 | La propriété d'événement requise est manquante : {0}. | |
| E1124 | La propriété de relation requise est manquante : {0}. | |
| E1125 | La valeur {0} n'est pas un code d'option valide dans l'ensemble d'options {1} | |
| E1126 | Il n'est pas autorisé de mettre à jour la propriété de l'entité suivie : {0}. | |
| E1127 | Il n'est pas autorisé de mettre à jour la propriété d'inscription : {0}. | |
| E1128 | Il n'est pas autorisé de mettre à jour la propriété de l'événement : {0}. | |
| E1300 | Généré par la règle de programme ({0}) - {1} | |
| E1301 | Généré par la règle de programme ({0}) - L'élément de données obligatoire {1} n'est pas présent | |
| E1302 | DataElement {0} is not valid: {1} | |
| E1303 | Mandatory DataElement {0} is not present | |
| E1304 | DataElement {0} is not a valid data element | |
| E1305 | DataElement {0} is not part of {1} program stage | |
| E1306 | Généré par la règle de programme ({0}) - L'attribut obligatoire {1} n'est pas présent | |
| E1307 | Généré par la règle de programme ({0}) - Impossible d'attribuer une valeur à l'élément de données {1}. La valeur fournie doit être vide ou correspondre à la valeur calculée {2} | |
| E1308 | Généré par la règle de programme ({0}) - L'élément de données {1} est remplacé dans l'événement {2} | |
| E1309 | Généré par la règle de programme ({0}) - Impossible d'attribuer une valeur à l'attribut {1}. La valeur fournie doit être vide ou correspondre à la valeur calculée {2} | |
| E1310 | Generated by program rule ({0}) - Attribute {1} is being replaced in te {2} | |
| E1313 | L'événement {0} d'une inscription ne renvoie pas à une entité suivie existante. Les données de votre système sont peut-être corrompues. | Il s'agit d'une anomalie dans les données existantes, où les inscriptions peuvent ne pas faire référence à une entité suivie. |
| E1314 | Generated by program rule ({0}) - DataElement {1} is mandatory and cannot be deleted. | |
| E1315 | Status {0} does not allow defining data values. Statuses that do allow defining data values are: {1} | |
| E1316 | No event can transition from status {0} to status {1}. | |
| E1317 | Generated by program rule ({0}) - Attribute {1} is mandatory and cannot be deleted. | |
| E4000 | La relation : {0} ne peut pas être reliée à elle-même | |
| E4001 | L'élément de relation {0} n'est pas valide pour la relation {1} : un élément ne peut être relié qu'à une seule entité Tracker. | |
| E4006 | Impossible de trouver le Type de relation : {0}. | |
| E4010 | La contrainte du type de relation {0} nécessite un {1} mais un {2} a été trouvé . | |
| E4012 | Impossible de trouver {0} : {1}, liés à la relation. | |
| E4014 | La contrainte du type de relation {0} nécessite une entité suivie de type {1} mais c'est un type {2} qui a été trouvé. | |
| E4015 | La relation {0} existe déjà. | |
| E4016 | La relation {0} n'existe pas. | |
| E4017 | La relation: {0}, est déjà supprimé et ne peut donc plus être modifié. | |
| E4018 | La relation : {0}, liant {1} : {2} à {3} : {4} existe déjà. | |
| E4019 | L'utilisateur : {0} n'a pas d'accès en écriture de données sur le Type de relation : {1}. | |
| E4020 | User: {0}, has no write access to relationship: {1}. | |
| E5000 | "{0}" {1} ne peut pas être maintenu car "{2}" {3} référencé par lui ne peut pas être maintenu. | L'importateur ne peut pas maintenir un objet tracker car une référence ne peut pas être maintenue. |
| E9999 | N/A | Message d'erreur non défini. |
Validation¶
Lors de l'importation de données à l'aide de l'importateur du Tracker, une série de validations est effectuée pour garantir la validité des données. Cette section décrit certains types de validation effectués afin que vous puissiez mieux comprendre un échec de validation lors de votre importation.
Propriétés requises¶
Chaque objet Tracker possède quelques propriétés qui doivent être présentes lors de l'importation des données. Pour obtenir une liste exhaustive des propriétés requises, consultez la [section sur les objets Tracker] (#webapi_nti_tracker_objects).
Lors de la validation des propriétés requises, nous parlons généralement de références à d'autres données ou métadonnées. Dans ces cas, on note trois critères principaux :
- La référence est présente dans la charge utile et est non nulle.
- La référence indique le bon type de données et existe dans la base de données
- L'utilisateur est autorisé à voir la référence
Si la première condition n'est pas remplie, l'importation échouera et un message indiquant une référence manquante sera généré. Cependant, si la référence indique un objet qui n'existe pas ou auquel l'utilisateur n'a pas accès, le message généré indiquera que la référence n'a pas été trouvée.
Formats¶
Certaines propriétés des objets Tracker requièrent un format spécifique. Lors de l'importation des données, chacune de ces propriétés est validée au regard du format attendu et renvoie des erreurs en fonction de la propriété dont le format est incorrect. Voici quelques exemples de propriétés validées de cette manière :
- Les identifiants d'utilisateur ou UID (Ils couvrent toutes les références à d’autres données ou métadonnées dans DHIS2.)
- Dates
- Géométrie (Les coordonnées doivent correspondre au format spécifié par son type)
Accès des utilisateurs¶
Toutes les données importées seront validées en fonction des métadonnées (Partage) et des unités d'organisation (Champs d'application des unités d'organisation) référencées dans les données. Vous pourrez trouver plus d’informations sur les champs d'application du partage et des unités d’organisation dans les sections suivantes.
Le partage est validé en même temps que la recherche des références dans la base de données. Les métadonnées auxquelles l'utilisateur n'a pas accès seront traitées comme si elles n'existaient pas. L'importation validera toutes les métadonnées référencées dans les données.
Les unités d'organisation, quant à elles, servent un double objectif. D'une part, elles permettent de s'assurer que les données ne soient importées que pour une unité d'organisation figurant dans le "champ de saisie" de l'utilisateur. D'autre part, elles sont également utilisées pour restreindre les programmes disponibles. Cela signifie que si vous essayez d'importer des données pour une unité d'organisation qui n'a pas accès au programme que vous importez, l'importation ne sera pas valide.
Les utilisateurs disposant de l'autorité TOUS ne sont pas affectés par les limites des champs d'application de partage et d'unité d'organisation lorsqu'ils importent des données. Cependant, ils ne peuvent pas importer d'inscriptions dans des unités d'organisation qui n'ont pas accès au programme d'inscription.
Valeurs d'attribut et de données¶
Les attributs et les valeurs de données font partie respectivement d'une entité suivie et d'un événement. Cependant, les attributs peuvent être liés à une entité suivie soit par son type (TrackedEntityType), soit par son programme (Program). Les attributs peuvent également être uniques.
La première validation effectuée lors de l'importation consiste à s'assurer que la valeur fournie pour un attribut ou un élément de données est conforme au type de valeur attendu. Par exemple, supposons que vous importiez une valeur pour un élément de données de type numérique. Dans ce cas, la valeur doit être numérique. Toute erreur liée à une non-concordance entre un type et une valeur se traduira par le même code d'erreur, mais avec un message spécifique lié au type de violation.
Les attributs et les valeurs de données obligatoires sont également vérifiés. Actuellement, la suppression des attributs obligatoires n'est pas autorisée. Dans certains cas d'utilisation, les valeurs doivent être envoyées séparément, tandis que dans d'autres, toutes les valeurs doivent être envoyées en une seule fois. Les programmes peuvent être configurés pour valider les attributs obligatoires ON_COMPLETE (complet) ou ON_UPDATE_AND_INSERT (mise à jour et insertion) pour s'adapter à ces cas d'utilisation.
Les attributs uniques sont validés au moment de l'importation. Cela signifie que tant que la valeur fournie est unique pour l'attribut et ce dans tout le système, l'importation sera acceptée. Cependant, si la valeur unique est utilisée par une autre entité suivie que celle qui est importée, l'importation échouera.
Configuration¶
Les dernières validations dans l'importateur sont des validations basées sur la configuration des métadonnées pertinentes par l'utilisateur. Pour plus d'informations sur chaque configuration, consultez les sections correspondantes. Trouvez ci-après quelques exemples de validations configurables :
- Type de fonctionnalité (pour la géométrie)
- Événements attribuables à l'utilisateur
- Autoriser les dates futures
- Inscrire une fois
- Et plus.
Ces configurations apporteront des modifications supplémentaires à la manière dont la validation est effectuée lors de l'importation.
Règles de programme¶
Les utilisateurs peuvent configurer des Règles de programme, qui vont ajouter un fonctionnement conditionnel aux formulaires du Tracker. En plus d'exécuter ces règles dans les applications du Tracker, l'importateur du Tracker va également procéder à une sélection de ces règles. Puisque l'importateur exécute également ces règles, nous pouvons garantir un niveau de validation supplémentaire.
Toutes les actions de règles de programme ne sont pas prises en charge, car elles ne sont adaptées qu'à une présentation de type « frontend ». Une liste complète des actions de règles de programme prises en charge est présentée ci-dessous.
| Action de règle de programme | Pris en charge |
|---|---|
| DISPLAYTEXT (afficher le texte) | |
| DISPLAYKEYVALUEPAIR (afficher la paire clé-valeur) | |
| HIDEFIELD (cacher le champ) | |
| HIDESECTION (cacher la section) | |
| ASSIGN (attribuer ) | X |
| SHOWWARNING (afficher un avertissement) | X |
| SHOWERROR (afficher l'erreur) | X |
| WARNINGONCOMPLETION (avertissement à la fin) | X |
| ERRORONCOMPLETION (erreur à la fin) | X |
| CREATEEVENT (créer un événement) | |
| SETMANDATORYFIELD (définir un champ obligatoire) | X |
| SENDMESSAGE (envoyer un message) | X |
| SCHEDULEMESSAGE (planifier un message) | X |
Les règles de programme sont évaluées dans l'importateur de la même manière que dans les applications du Tracker. En résumé, les conditions suivantes sont prises en compte lors de l'application des règles de programme:
- La règle de programme doit être liée aux données importées ; par exemple, une étape de programme ou un élément de données.
- La condition de la règle de programme doit être évaluée comme étant vraie
Les résultats des règles de programme dépendent des actions définies dans ces règles :
- Les actions des règles de programme peuvent aboutir à 2 résultats différents : avertissements ou erreurs.
- Les erreurs feront échouer la validation, tandis que les avertissements seront rapportés sous forme de message dans le résumé de l'importation.
- Les actions SHOWWARNING (afficher l'avertissement) et WARNINGONCOMPLETION (avertissement à la fin) ne peuvent générer que des avertissements.
- Les actions SHOWERROR (afficher l'erreur), ERRORONCOMPLETION (erreur à la fin), et SETMANDATORYFIELD (définir un champ obligatoire) ne peuvent générer que des erreurs.
- L'action ASSIGN (attribuer) peut générer à la fois des avertissements et des erreurs.
- Lorsque l'action attribue une valeur à un attribut/élément de données vide, un avertissement est généré.
- Lorsque l'action attribue une valeur à un attribut/élément de données qui a déjà la même valeur à attribuer, un avertissement est généré.
- Lorsque l'action attribue une valeur à un attribut/élément de données qui a déjà une valeur et que la valeur à attribuer est différente, une erreur est générée à moins que le paramètre système
RULE_ENGINE_ASSIGN_OVERWRITEne soit défini à "true".
Les règles de programme peuvent également entraîner des effets secondaires, telles que l'envoi et la planification de messages. Pour plus d’informations sur les actions non voulues, veuillez consulter la section suivante.
REMARQUE
Les règles de programme peuvent être ignorées lors de l'importation à l'aide du paramètre
skipProgramRules(ignorer les règles de programme).
Effets secondaires¶
Une fois qu'une importation est terminée, des tâches spécifiques peuvent être déclenchées du fait de cette importation. Ces tâches sont ce que nous appelons des « effets secondaires ». Ces tâches exécutent des opérations qui n'affectent pas l'importation elle-même.
Les effets secondaires sont des tâches qui s'exécutent séparément de l'importation, mais qui sont toujours déclenchées par une importation. Étant donné que les effets secondaires sont dissociés de l'importation, ils peuvent échouer même si l'importation réussit. De plus, les effets secondaires ne sont exécutés que lorsque l'importation réussit ; ils ne peuvent donc pas échouer dans l'autre sens.
Voici donc les effets secondaires actuellement pris en charge :
| Effets secondaires | Pris en charge | Description |
|---|---|---|
| Notification de Tracker | X | Les mises à jour peuvent déclencher des notifications. Celles qui déclenchent des notifications sont inscription, mise à jour d'événement, achèvement d'événement ou d'inscription. |
| Notification de règle de programme | X | Les règles de programme peuvent déclencher des notifications. Notez que ces notifications font partie des effets des règles de programme qui sont générés via le moteur de règles de DHIS2. |
REMARQUE
Certaines configurations peuvent contrôler l'exécution des effets secondaires. La fonction
skipSideEffects(ignorer les effets secondaires) peut être activée lors de l'importation pour ignorer complètement les effets secondaires. Par exemple, vous pouvez utiliser ce paramètre lors de l'importation d'un objet pour lequel vous ne voulez pas déclencher de notifications.
Assigner un utilisateur à des événements¶
Certains processus bénéficient du fait que des événements soient traités comme des tâches, et pour cette raison, vous pouvez assigner un utilisateur à un événement.
L'assignation d'un utilisateur à un événement ne modifie pas l'accès ou les autorisations des utilisateurs, mais crée un lien entre l'événement et l'utilisateur. Lorsqu'un utilisateur est assigné à un événement, vous pouvez lancer des requêtes sur les événements à partir de l'API en utilisant le champ assignedUser (utilisateur attribué) en tant que paramètre.
Lorsque vous voulez assigner un utilisateur à un événement, fournissez simplement l'UID de cet utilisateur dans le champ assignedUser. Voir l'exemple suivant:
{
...
"events": [
{
"event": "ZwwuwNp6gVd",
"programStage": "nlXNK4b7LVr",
"orgUnit": "O6uvpzGd5pu",
"enrollment": "MNWZ6hnuhSw",
"assignedUser" : "M0fCOxtkURr"
}
],
...
}
Dans cet exemple, l'utilisateur avec l'uid M0fCOxtkURr sera assigné à l'événement avec l'uid ZwwuwNp6gVd. Un seul utilisateur peut être assigné à un événement.
Pour utiliser cette fonctionnalité, l'assignation d'utilisateurs doit être activée pour l'étape de programme concernée et l'uid fourni pour l'utilisateur doit renvoyer à un utilisateur existant et valide.
Exportation Tracker¶
Les points d'extrémité de l'exportation Tracker vous permettent de récupérer les objets précédemment importés, à savoir :
- entités suivies
- événements
- inscriptions
- relations
NOTE
- All tracker export endpoints default to a
JSONresponse content.CSVis only supported by tracked entities and events.- You can export a CSV file by adding the
Acceptheader text/csv or application/csv to the request.- You can download in zip and gzip formats:
- CSV for Tracked entities
- JSON and CSV for Events
- You can export a Gzip file by adding the
Acceptheader application/csv+gzip for CSV or application/json+gzip for JSON.- You can export a Zip file by adding the
Acceptheader application/csv+zip for CSV or application/json+zip for JSON.
Paramètres de requête courants¶
Le point d'extrémité suivant prend en charge les paramètres normalisés pour la pagination.
- Entités suivies
GET /api/tracker/trackedEntities - Évènements
GET /api/tracker/events - Inscriptions
GET /api/tracker/enrollments - Relations
GET /api/tracker/relationships
Paramètres de requête pour la pagination¶
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
page | Integer | Tout entier positif | Numéro de page à renvoyer. La valeur par défaut est 1 . |
pageSize | Integer | Tout entier positif | Taille de la page. La valeur par défaut est 50. |
totalPages (pages totales) | Boolean | true|false | Indique s'il faut renvoyer le nombre total d'éléments et de pages. La valeur par défaut est false car l'obtention des totaux est une opération coûteuse. |
paging | Boolean | true|false | Indique si la pagination doit être ignorée et si toutes les lignes doivent être renvoyées. La valeur par défaut est true, ce qui signifie que par défaut toutes les requêtes sont paginées, sauf si paging=false (c'est-à-dire si le paramètre "pagination" est défini sur "faux") |
skipPaging est devenu obsolète et sera supprimé dans la version 42 ; utilisez paging | Boolean | true|false | Indique si la pagination doit être ignorée et si toutes les lignes doivent être renvoyées. La valeur par défaut est faux, ce qui signifie que par défaut toutes les requêtes sont paginées, sauf si skipPaging=true (c'est-à-dire si le paramètre "ignorer la pagination" est défini sur "vrai") |
order | String | Liste séparée par des virgules de paires de noms de propriétés et de directions de tri au format propName:sortDirection Exemple : createdAt:descRemarque: propName (nom de la propriété) est sensible à la casse. Les sortDirections (directions de tri) valides sont asc et desc. sortDirection est insensible à la casse. La valeur par défaut de sortDirection est asc pour les propriétés ou les UIDs sans sortDirection explicite. |
Attention
Sachez que les performances sont directement liées à la quantité de données qui fait l'objet de la requête. Le renvoi des pages plus volumineuses prendra plus de temps.
Paramètres de requête pour le mode de sélection des unités d'organisation{ #request-parameters-for-organisational-unit-selection-mode }¶
Les modes de sélection des unités d'organisation disponibles sont SÉLECTIONNÉS, SUBORDONNÉS, DESCENDANTS, ACCESSIBLE, SAISIE et TOUT. Chaque mode est expliqué en détail dans cette section.
Paramètre de requête pour filtrer les réponses¶
Tous les points d'extrémité d'exportation acceptent un paramètre fields (champs) qui contrôle les champs qui seront renvoyés dans la réponse JSON. Le paramètre fields accepte une liste de noms de champs ou de modèles séparés par des virgules. Quelques filtres fields possibles sont présentés ci-dessous. Consultez la section [filtre de champ de métadonnées (#webapi_metadata_field_filter)] pour obtenir un guide plus complet sur l'utilisation du paramètre fields.
Exemples¶
| Exemple de paramètre | Signification |
|---|---|
fields=* | renvoie tous les champs |
fields=createdAt,uid | renvoie uniquement les champs createdAt et uid |
fields=inscriptions[*,!uid] | renvoie tous les champs des inscriptions sauf les uid |
fields=enrollments[uid] | renvoie uniquement l'uid du champ inscriptions |
fields=enrollments[uid,enrolledAt] | renvoie uniquement l'uid des champs inscriptions et enrolledAt (inscrit à) |
Entités suivies (GET /api/tracker/trackedEntities)¶
Deux points d'extrémité sont dédiés aux entités suivies :
GET /api/tracker/trackedEntities- récupère les entités suivies correspondant aux critères donnés
GET /api/tracker/trackedEntities/{id}- récupère une entité suivie en fonction de l'identifiant fourni
If not otherwise specified, JSON is the default response for the GET method. The API also supports CSV export for single and collection endpoints. Furthermore, compressed CSV types is an option for the collection endpoint.
CSV¶
In the case of CSV, the fields request parameter has no effect, and the response will always contain the following fields:
- Entité suivie (UID)
- Type d'entité suivie (UID)
- createdAt (Date et heure)
- createdAtClient (Date et heure)
- updatedAt (Date et heure)
- updatedAtClient (Date et heure)
- Unité d'organisation (UID)
- inactif (booléen)
- supprimé (booléen)
- potentialDuplicate (booléen)
- geometry (WKT, https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry. Vous pouvez l'omettre dans le cas d'un type de
Pointet si lalatitudeet lalongitudesont fournies) - latitude (Latitude d'un type de géométrie
Point) - longitude (Longitude d'un type de géométrie
Point) - attribut (UID)
- Afficher le nom (Chaîne)
- attrCreatedAt (Date de création de l'attribut)
- attrUpdatedAt (Date de la dernière mise à jour de l'attribut)
- type de valeur (Chaîne)
- valeur (Chaîne)
- stockéBy (Chaîne)
- createdBy (Nom d'utilisateur de l'utilisateur)
- updatedBy (Nom d'utilisateur de l'utilisateur)
Voir Entités suivies et Attributs pour plus de descriptions de champs.
GZIP¶
La réponse est le fichier trackedEntities.csv.gz contenant le fichier trackedEntities.csv.
ZIP¶
La réponse est le fichier trackedEntities.csv.zip contenant le fichier trackedEntities.csv.
Point d'extrémité de la collection d'entités suivies GET /api/tracker/trackedEntities¶
Le but de ce point d'extrémité est de récupérer les entités suivies correspondant aux critères fournis par le client.
Le point d'extrémité renvoie une liste d'entités suivies qui correspondent aux paramètres de la requête.
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
filtre | String | Valeurs des filtres d'attribut séparées par des virgules | Restreint la réponse aux TEI correspondant aux filtres indiqués. Un filtre est un UID de propriété ou d'attribut séparé par deux points (:) avec des paires d'opérateurs et de valeurs optionnelles. Exemple : filter=H9IlTX2X6SL:sw:A avec un opérateur commençant par sw suivi d'une valeur. Les caractères spéciaux comme + doivent être encodés en pourcentage, donc %2B au lieu de +. Les caractères tels que : (deux points) ou , (virgule), qui font partie de la valeur du filtre, doivent être séparés par / (barre oblique). De même, / doit être séparé. Plusieurs paires opérateur/valeur pour la même propriété/attribut comme filter=AuPLng5hLbE:gt:438901703:lt:448901704 sont autorisées. Par contre, il n'est pas autorisé de répéter l'UID d'un même attribut. L'utilisateur doit avoir accès à l'attribut pour pouvoir effectuer un filtrage dessus. |
orgUnits | String | Liste des unités d'organisation UID séparées par des virgules. | Renvoie uniquement les d'entités suivies appartenant aux unités d'organisation fournies |
orgUnit est devenu obsolète et sera supprimé dans la version 42 ; utilisez orgUnits. | String | Liste des unités d'organisation UID séparées par des points-virgules. | Renvoie uniquement les d'entités suivies appartenant aux unités d'organisation fournies. |
orgUnitMode see orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
ouMode est devenu obsolète et sera supprimé dans la version 42, utilisez orgUnitMode voir orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
programme | String | UID de programme | un UID de programme dans lequel les entités suivies présentes dans la réponse doivent être inscrites. |
programStatus (statut de programme) | String | ACTIVE|COMPLETED|CANCELLED | Le statut du programme de l’entité suivie dans le programme donné |
programStage (étape de programme) | String | UID | un UID d'étape de programme pour lequel les entités suivies présentes dans la réponse doivent avoir des événements. |
followUp (suivi) | Boolean | true|false | Indique si l'entité suivie est marquée pour le suivi du programme spécifié. |
updatedAfter (mis à jour après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de la dernière mise à jour |
updatedBefore (mis à jour avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin de la dernière mise à jour |
updatedWithin (mis à jour pendant) | Durée | ISO-8601 | Renvoie les TEI qui ne dépassent pas la durée spécifiée |
enrollmentEnrolledAfter (Inscription après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de l’inscription au programme donné |
enrollmentEnrolledBefore (Inscription avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin de l’inscription au programme donné |
enrollmentOccurredAfter (Inscription survenue après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de l'événement dans le programme donné |
enrollmentOccurredBefore (inscription survenue avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin de l'événement dans le programme donné |
TrackedEntityType (Type d'entité suivie) | String | UID du type d'entité suivi | Renvoie uniquement les entités suivies d'un type donné |
trackedEntities | String | Liste des UID des entités suivies, séparée par des virgules. | Il est possible de filtrer le résultat de manière à obtenir un ensemble limité d'entités suivies qui utilisent les uids explicites des entités suivies. Vous pouvez le en utilisant le paramètre trackedEntity=id1;id2. Ce paramètre créera, au minimum, la limite externe des résultats, en constituant la liste de toutes les entités suivies à l'aide des uids fournis. Si d'autres paramètres/filtres de ce tableau sont utilisés, ils limiteront davantage les résultats à partir de la limite externe explicite. |
trackedEntity est devenu obsolète et sera supprimé dans la version 42 ; utilisez trackedEntities. | String | Liste des UID des entités suivies séparées par des points-virgules. | Il est possible de filtrer le résultat de manière à obtenir un ensemble limité d'entités suivies qui utilisent les uids explicites des entités suivies. Vous pouvez le en utilisant le paramètre trackedEntity=id1;id2. Ce paramètre créera, au minimum, la limite externe des résultats, en constituant la liste de toutes les entités suivies à l'aide des uids fournis. Si d'autres paramètres/filtres de ce tableau sont utilisés, ils limiteront davantage les résultats à partir de la limite externe explicite. |
assignedUserMode (mode d'utilisateur assigné) | String | CURRENT|PROVIDED|NONE|ANY | Restreint le résultat aux entités suivies à qui des événements sont attribués, en fonction du mode de sélection de l'utilisateur assigné. Voir le tableau ci-dessous "Modes d'utilisateur assigné" pour les explications. |
assignedUsers | String | Liste des UID d'utilisateurs séparés par des virgules, à filtrer sur la base des événements affectés aux utilisateurs. | Il est possible de filtrer le résultat pour obtenir un ensemble limité d'entités suivies avec des événements attribués aux UID donnés, à l'aide du paramètre assignedUser=id1;id2. Ce paramètre ne sera pris en compte que si le mode d'utilisateur assigné est FOURNI ou nul. L'API va générer une erreur si, par exemple, assignedUserMode=CURRENT et assignedUser=someId |
assignedUser est devenu obsolète et sera supprimé dans la version 42 ; utilisez assignedUsers. | String | Liste des UID d'utilisateurs séparés par des points virgules, à filtrer sur la base des événements affectés aux utilisateurs. | Il est possible de filtrer le résultat pour obtenir un ensemble limité d'entités suivies avec des événements attribués aux UID donnés, à l'aide du paramètre assignedUser=id1;id2. Ce paramètre ne sera pris en compte que si le "mode d'utilisateur assigné" est FOURNI ou nul. L'API va générer une erreur si, par exemple, assignedUserMode=CURRENT et assignedUser=someId |
order | String | Liste séparée par des virgules de paires de noms de propriétés, d'attributs ou d'UID et de directions de tri au format propName:sortDirection. | Les valeurs prises en charge sont: createdAt (créé à) createdAtClient (créé au niveau du client), enrolledAt (inscrit à), inactive (inactif), trackedEntity (entité suivie), updatedAt (mis à jour à), updatedAtClient (mis à jour au niveau du client), . |
eventStatus (statut d'événement) | String | ACTIVE|COMPLETED|VISITED|SCHEDULE|OVERDUE|SKIPPED | Il s'agit du statut de tous les événements présents dans le programme spécifié |
eventOccurredAfter (événement survenu après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de l'événement pour le programme donné |
eventOccurredBefore (événement survenu avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin de l'événement pour le programme donné |
includeDeleted (inclure les éléments supprimés) | Boolean | true|false | Indique s’il faut inclure les éléments supprimés de façon réversible |
potentialDuplicate (doublon potentiel) | Boolean | true|false | Permet de filtrer le résultat en supposant qu'une TEI soit un doublon potentiel. Définit sur true, il renvoie les TEI marqués comme doublons potentiels. Définit sur false, il renvoie les TEI NON marqués comme doublons potentiels. En cas d'omission, nous ne vérifions pas si une TEI est un doublon potentiel ou pas. |
Les modes d'utilisateur assigné disponibles sont expliqués dans le tableau suivant.
Tableau : Modes d'utilisateur assigné
| Mode | Description |
|---|---|
| CURRENT | Inclut les événements attribués à l’utilisateur actuellement connecté. |
| PROVIDED | Inclut les événements attribués à l’utilisateur indiqué dans la requête. |
| NONE | Inclut uniquement les événements non attribués. |
| ANY | Inclut tous les événements attribués, peu importe à qui ils sont attribués. |
La requête n'est pas sensible à la casse. Les règles suivantes s'appliquent aux paramètres de requête.
-
Au moins une unité d'organisation doit être spécifiée avec le paramètre
orgUnit(un ou plusieurs), ouorgUnitMode=ALLdoit être spécifié. -
Un seul des paramètres
programettrackedEntitypeut être spécifié (zéro ou un). -
Si
programStatusest spécifié, alorsprogramdoit également être spécifié. -
Si
followUpest spécifié, alorsprogramdoit également être spécifié. -
Si
enrollmentEnrolledAfterouenrollmentEnrolledBeforeest spécifié, alorsprogramdoit également être spécifié. -
Les éléments du filtre ne peuvent être spécifiés qu'une seule fois.
Exemples de requêtes¶
Une requête concernant toutes les entités suivies associées à une unité d'organisation et à un programme spécifiques peut ressembler à ce qui suit :
GET /api/tracker/trackedEntities?program=IpHINAT79UW&orgUnits=DiszpKrYNg8
Pour lancer une requête sur les entités suivies en utilisant un attribut avec un filtre et un attribut sans filtre, avec une unité d'organisation en utilisant le mode de requête par unité d'organisation descendante :
GET /api/tracker/trackedEntities?program=IpHINAT79UW&orgUnits=DiszpKrYNg8&filter=w75KJ2mc4zz:EQ:John
Une requête dans laquelle plusieurs opérandes et filtres sont spécifiés pour un élément de filtre :
GET /api/tracker/trackedEntities?orgUnits=DiszpKrYNg8&program=ur1Edk5Oe2n&filter=lw1SqmMlnfh:GT:150&filter=lw1SqmMlnfh:LT:190
Un filtre de requête avec une valeur qui doit être échappée et qui sera interprétée comme :,/ :
GET /api/tracker/trackedEntities?orgUnits=DiszpKrYNg8&program=ur1Edk5Oe2n&filter=lw1SqmMlnfh:EQ:/:/,//
Pour spécifier les dates d'inscription au programme dans la requête :
GET /api/tracker/trackedEntities?orgUnits=DiszpKrYNg8&program=IpHINAT79UW&fields=trackedEntity,enrollments[enrolledAt]&enrollmentEnrolledAfter=2024-01-01
Pour effectuer une requête sur un attribut en utilisant plusieurs valeurs dans un filtre IN :
GET /api/tracker/trackedEntities?trackedEntityType=nEenWmSyUEp&orgUnits=DiszpKrYNg8&filter=w75KJ2mc4zz:IN:Scott;Jimmy;Santiago
Vous pouvez utiliser une gamme d'opérateurs pour effectuer le filtrage :
| Opérateur | Description |
|---|---|
EQ | Egal à |
GE | Supérieur ou égal à |
GT | Supérieur à |
IN | Égal à l'une des multiples valeurs séparées par ";" |
LE | inférieur ou égal à |
LIKE | Pareil (correspondance textuelle) |
LT | Inférieur à |
NE | Pas égal à |
Exemple de réponse des entités suivies¶
The API supports CSV and JSON response for GET /api/tracker/trackedEntities.
JSON¶
Les réponses peuvent être filtrées en fonction des champs recherchés ; voir Paramètre de requête pour filtrer les réponses
Une réponse JSON peut ressembler à ce qui suit:
{
"pager": {
"page": 1,
"pageSize": 1
},
"trackedEntities": [
{
"trackedEntity": "F8yKM85NbxW",
"trackedEntityType": "Zy2SEgA61ys",
"createdAt": "2019-08-21T13:25:38.022",
"createdAtClient": "2019-03-19T01:12:16.624",
"updatedAt": "2019-08-21T13:31:33.410",
"updatedAtClient": "2019-03-19T01:12:16.624",
"orgUnit": "DiszpKrYNg8",
"inactive": false,
"deleted": false,
"potentialDuplicate": false,
"geometry": {
"type": "Point",
"coordinates": [
-11.7896,
8.2593
]
},
"attributes": [
{
"attribute": "B6TnnFMgmCk",
"displayName": "Age (years)",
"createdAt": "2019-08-21T13:25:38.477",
"updatedAt": "2019-08-21T13:25:38.477",
"storedBy": "braimbault",
"valueType": "INTEGER_ZERO_OR_POSITIVE",
"value": "30"
},
{
"attribute": "TfdH5KvFmMy",
"displayName": "First Name",
"createdAt": "2019-08-21T13:25:38.066",
"updatedAt": "2019-08-21T13:25:38.067",
"storedBy": "josemp10",
"valueType": "TEXT",
"value": "Sarah"
},
{
"attribute": "aW66s2QSosT",
"displayName": "Last Name",
"createdAt": "2019-08-21T13:25:38.388",
"updatedAt": "2019-08-21T13:25:38.388",
"storedBy": "karoline",
"valueType": "TEXT",
"value": "Johnson"
}
]
}
]
}
CSV¶
Une réponse CSV peut ressembler à ce qui suit:
trackedEntity,trackedEntityType,createdAt,createdAtClient,updatedAt,updatedAtClient,orgUnit,inactive,deleted,potentialDuplicate,geometry,latitude,longitude,storedBy,createdBy,updatedBy,attrCreatedAt,attrUpdatedAt,attribute,displayName,value,valueType
F8yKM85NbxW,Zy2SEgA61ys,2019-08-21T11:25:38.022Z,2019-03-19T00:12:16.624Z,2019-08-21T11:31:33.410Z,2019-03-19T00:12:16.624Z,DiszpKrYNg8,false,false,false,"POINT (-11.7896 8.2593)",8.2593,-11.7896,,,,2019-08-21T11:25:38.477Z,2019-08-21T11:25:38.477Z,B6TnnFMgmCk,"Age (years)",30,INTEGER_ZERO_OR_POSITIVE
F8yKM85NbxW,Zy2SEgA61ys,2019-08-21T11:25:38.022Z,2019-03-19T00:12:16.624Z,2019-08-21T11:31:33.410Z,2019-03-19T00:12:16.624Z,DiszpKrYNg8,false,false,false,"POINT (-11.7896 8.2593)",8.2593,-11.7896,,,,2019-08-21T11:25:38.066Z,2019-08-21T11:25:38.067Z,TfdH5KvFmMy,"First Name",Sarah,TEXT
F8yKM85NbxW,Zy2SEgA61ys,2019-08-21T11:25:38.022Z,2019-03-19T00:12:16.624Z,2019-08-21T11:31:33.410Z,2019-03-19T00:12:16.624Z,DiszpKrYNg8,false,false,false,"POINT (-11.7896 8.2593)",8.2593,-11.7896,,,,2019-08-21T11:25:38.388Z,2019-08-21T11:25:38.388Z,aW66s2QSosT,"Last Name",Johnson,TEXT
Tracked Entities Collection limits¶
The collection endpoint limits results in three ways:
-
KeyTrackedEntityMaxLimit in System settings:
KeyTrackedEntityMaxLimitdefines the maximum tracked entities in an API response, protecting database and server resources. No limit applies when set to 0. Configure it via/api/systemSettingsas described in the documentation. -
Max number of TEs to return in Program or tracked entity type: it limits results when searching outside the capture scope with a specified program or tracked entity type. The API returns an error if matches exceed this limit. No limit applies when searching within the capture scope or when set to 0. This limit is configurable in the maintenance app.
-
Pagination: As explained here.
For paginated requests with non-zero KeyTrackedEntityMaxLimit:
-
If pageSize ≤ KeyTrackedEntityMaxLimit:
pageSizeis enforced -
If pageSize > KeyTrackedEntityMaxLimit: The API returns an error
Point d'extrémité d'objet unique d'entités suivies GET /api/tracker/trackedEntities/{uid}¶
Le but de ce point d'extrémité est de récupérer une entité suivie en se basant sur son UID.
Syntaxe de la requête¶
GET /api/tracker/trackedEntities/{uid}?program={programUid}&fields={fields}
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
uid | String | uid | Renvoie l'entité suivie disposant de l'uid spécifié |
programme | String | uid | Inclut les attributs du programme dans la réponse (seuls ceux auxquels l'utilisateur a accès) |
champs | String | Tout filtre de champ valide (par défaut *,!relationships,!enrollments,!events,!programOwners) | Inclut les sous-objets spécifiés dans la réponse |
Exemples de requêtes¶
Une requête pour une entité suivie:
GET /api/tracker/trackedEntities/PQfMcpmXeFE
Exemple de réponse de l'entité suivie¶
The API supports CSV and JSON response for GET /api/tracker/trackedEntities/{uid}
JSON¶
Exemple de réponse json :
{
"trackedEntity": "PQfMcpmXeFE",
"trackedEntityType": "nEenWmSyUEp",
"createdAt": "2014-03-06T05:49:28.256",
"createdAtClient": "2014-03-06T05:49:28.256",
"updatedAt": "2016-08-03T23:49:43.309",
"orgUnit": "DiszpKrYNg8",
"inactive": false,
"deleted": false,
"potentialDuplicate": false,
"attributes": [
{
"attribute": "w75KJ2mc4zz",
"code": "MMD_PER_NAM",
"displayName": "First name",
"createdAt": "2016-08-03T23:49:43.308",
"updatedAt": "2016-08-03T23:49:43.308",
"valueType": "TEXT",
"value": "John"
},
{
"attribute": "zDhUuAYrxNC",
"displayName": "Last name",
"createdAt": "2016-08-03T23:49:43.309",
"updatedAt": "2016-08-03T23:49:43.309",
"valueType": "TEXT",
"value": "Kelly"
}
],
"enrollments": [
{
"enrollment": "JMgRZyeLWOo",
"createdAt": "2017-03-06T05:49:28.340",
"createdAtClient": "2016-03-06T05:49:28.340",
"updatedAt": "2017-03-06T05:49:28.357",
"trackedEntity": "PQfMcpmXeFE",
"program": "IpHINAT79UW",
"status": "ACTIVE",
"orgUnit": "DiszpKrYNg8",
"enrolledAt": "2024-03-06T00:00:00.000",
"occurredAt": "2024-03-04T00:00:00.000",
"followUp": false,
"deleted": false,
"events": [
{
"event": "Zq2dg6pTNoj",
"status": "ACTIVE",
"program": "IpHINAT79UW",
"programStage": "ZzYYXq4fJie",
"enrollment": "JMgRZyeLWOo",
"trackedEntity": "PQfMcpmXeFE",
"relationships": [],
"scheduledAt": "2023-03-10T00:00:00.000",
"followUp": false,
"deleted": false,
"createdAt": "2017-03-06T05:49:28.353",
"createdAtClient": "2016-03-06T05:49:28.353",
"updatedAt": "2017-03-06T05:49:28.353",
"attributeOptionCombo": "HllvX50cXC0",
"attributeCategoryOptions": "xYerKDKCefk",
"dataValues": [],
"notes": [],
"followup": false
}
],
"relationships": [],
"attributes": [
{
"attribute": "w75KJ2mc4zz",
"code": "MMD_PER_NAM",
"displayName": "First name",
"createdAt": "2016-08-03T23:49:43.308",
"updatedAt": "2016-08-03T23:49:43.308",
"valueType": "TEXT",
"value": "John"
},
{
"attribute": "zDhUuAYrxNC",
"displayName": "Last name",
"createdAt": "2016-08-03T23:49:43.309",
"updatedAt": "2016-08-03T23:49:43.309",
"valueType": "TEXT",
"value": "Kelly"
},
{
"attribute": "AuPLng5hLbE",
"code": "National identifier",
"displayName": "National identifier",
"createdAt": "2016-08-03T23:49:43.301",
"updatedAt": "2016-08-03T23:49:43.301",
"valueType": "TEXT",
"value": "245435245"
},
{
"attribute": "ruQQnf6rswq",
"displayName": "TB number",
"createdAt": "2016-08-03T23:49:43.308",
"updatedAt": "2016-08-03T23:49:43.308",
"valueType": "TEXT",
"value": "1Z 1F2 A84 59 4464 173 6"
},
{
"attribute": "cejWyOfXge6",
"displayName": "Gender",
"createdAt": "2016-08-03T23:49:43.307",
"updatedAt": "2016-08-03T23:49:43.307",
"valueType": "TEXT",
"value": "Male"
},
{
"attribute": "VqEFza8wbwA",
"code": "MMD_PER_ADR1",
"displayName": "Address",
"createdAt": "2016-08-03T23:49:43.307",
"updatedAt": "2016-08-03T23:49:43.307",
"valueType": "TEXT",
"value": "Main street 2"
}
],
"notes": []
}
],
"programOwners": [
{
"orgUnit": "DiszpKrYNg8",
"trackedEntity": "PQfMcpmXeFE",
"program": "ur1Edk5Oe2n"
},
{
"orgUnit": "DiszpKrYNg8",
"trackedEntity": "PQfMcpmXeFE",
"program": "IpHINAT79UW"
}
]
}
CSV¶
The response will be the same as the collection endpoint but referring to a single tracked entity, although it might have multiple rows for each attribute.
Tracked entity attribute value change logs¶
GET /api/tracker/trackedEntities/{uid}/changeLogs
This endpoint retrieves change logs for the attributes of a specific tracked entity. It returns a list of all tracked entity attributes that have changed over time for that entity.
| Paramètre | Type | Valeurs autorisées |
|---|---|---|
path /{uid} | String | Tracked entity UID. |
programme | String | Program UID (optional). |
Tracked entity attribute value change logs response example¶
Exemple de réponse json :
{
"pager":{
"page":1,
"pageSize":10
},
"changeLogs":[
{
"createdBy":{
"uid":"AIK2aQOJIbj",
"username":"tracker",
"firstName":"Tracker demo",
"surname":"User"
},
"createdAt":"2024-06-20T14:51:16.433",
"type":"UPDATE",
"change":{
"dataValue":{
"dataElement":"bx6fsa0t90x",
"previousValue":"true",
"currentValue":"false"
}
}
},
{
"createdBy":{
"uid":"AIK2aQOJIbj",
"username":"tracker",
"firstName":"Tracker demo",
"surname":"User"
},
"createdAt":"2024-06-20T14:50:32.966",
"type":"CREATE",
"change":{
"dataValue":{
"dataElement":"ebaJjqltK5N",
"currentValue":"0"
}
}
}
]
}
The change log type can be CREATE, UPDATE, or DELETE. CREATE and DELETE will always hold a single value: the former shows the current value, and the latter shows the value that was deleted. UPDATE will hold two values: the previous and the current.
Inscriptions (GET /api/tracker/enrollments)¶
Deux points d'extrémité sont dédiés aux inscriptions :
GET /api/tracker/enrollments- récupère les inscriptions correspondant aux critères donnés
GET /api/tracker/enrollments/{id}- récupère une inscription en fonction de l'identifiant fourni
Point d'extrémité de la collecte d'inscriptions GET /api/tracker/enrollments¶
Renvoie une liste d'événements en fonction des filtres.
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
orgUnits | String | Liste des unités d'organisation UID séparées par des virgules. | Renvoie uniquement les inscriptions appartenant aux unités d'organisation fournies. |
orgUnit est devenu obsolète et sera supprimé dans la version 42 ; utilisez orgUnits. | String | Liste des unités d'organisation UID séparées par des points-virgules. | Renvoie uniquement les inscriptions appartenant aux unités d'organisation fournies. |
orgUnitMode see orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
ouMode est devenu obsolète et sera supprimé dans la version 42, utilisez orgUnitMode voir orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
programme | String | uid | Identifiant du programme |
programStatus (statut de programme) | énumération | ACTIVE|COMPLETED|CANCELLED | Statut du programme |
followUp (suivi) | boolean | true|false | Statut du suivi de l'entité suivie du programme donné. Peut être vrai| faux ou omis. |
updatedAfter (mis à jour après) | DateTime (date et heure) | ISO-8601 | Seules les inscriptions mises à jour après cette date |
updatedWithin (mis à jour pendant) | Durée | ISO-8601 | Seules les inscriptions mises à jour depuis une durée donnée |
enrolledAfter (inscrits après) | DateTime (date et heure) | ISO-8601 | Seules les inscriptions plus récentes que cette date |
enrolledBefore (inscrits avant) | DateTime (date et heure) | ISO-8601 | Seules les inscriptions antérieures à cette date |
TrackedEntityType (Type d'entité suivie) | String | uid | Identifiant du type d'entité suivie |
trackedEntity | String | uid | Identifiant d'une entité suivie |
order | String | Liste séparée par des virgules de paires de noms de propriétés, d'attributs ou d'UID et de directions de tri au format propName:sortDirection. | Champs pris en charge : completedAt,(terminé à), createdAt (créé à), createdAtClient (créé au niveau du client), enrolledAt (inscrit à), updatedAt (mis à jour à), updatedAtClient (mis à jour au niveau du client). |
enrollments | String | Liste des UID des inscriptions, séparée par des virgules. | Filtre le résultat pour obtenir un ensemble limité d’identifiants en utilisant enrollments=id1,id2. |
enrollment est devenu obsolète et sera supprimé dans la version 42 ; utilisez enrollments | String | Liste de uid séparés par un point-virgule | Filtre le résultat pour obtenir un ensemble limité d’identifiants en utilisant enrollments=id1,id2. |
includeDeleted (inclure les éléments supprimés) | Boolean | S'il est défini sur "vrai", les événements supprimés de façon réversible seront inclus dans le résultat de votre requête. |
La requête n'est pas sensible à la casse. Les règles suivantes s'appliquent aux paramètres de la requête.
-
Au moins une unité d'organisation doit être spécifiée à l'aide du paramètre
orgUnit(une ou plusieurs), ou orgUnitMode=ALL doit être spécifié. -
Un seul des paramètres program et trackedEntity peut être spécifié (zéro ou un)
-
Si programStatus est spécifié, alors program doit également être spécifié.
-
Si followUp est spécifié, alors program doit également être spécifié.
-
Si enrolledAfter ou enrolledBefore est spécifié, alors program doit également être spécifié.
Exemples de requêtes¶
Une requête pour toutes les inscriptions associées à une unité d'organisation spécifique peut ressembler à ceci :
GET /api/tracker/enrollments?orgUnits=DiszpKrYNg8
Pour limiter la réponse aux inscriptions qui font partie d'un programme spécifique, vous pouvez inclure un paramètre de requête de programme :
GET /api/tracker/enrollments?orgUnits=O6uvpzGd5pu&orgUnitMode=DESCENDANTS&program=ur1Edk5Oe2n
Pour spécifier les dates d'inscription au programme dans la requête :
GET /api/tracker/enrollments?orgUnits=DiszpKrYNg8&program=M3xtLkYBlKI&enrolledAfter=2023-11-14&enrolledBefore=2024-02-07
Pour limiter la réponse aux inscriptions d'une entité suivie spécifique, vous pouvez inclure un paramètre de requête d'entité suivie:
GET /api/tracker/enrollments?trackedEntity=ClJ3fn47c4s
Pour limiter la réponse aux inscriptions d'une entité suivie spécifique, vous pouvez inclure un paramètre de requête d'entité suivie. Dans ce cas, nous avons limité la réponse aux inscriptions disponibles pour l'utilisateur actuel :
GET /api/tracker/enrollments?orgUnitMode=ACCESSIBLE&trackedEntity=tphfdyIiVL6
Format de réponse¶
La réponse JSON peut ressembler à ceci :
{
"pager": {
"page": 1,
"pageSize": 1
},
"enrollments": [
{
"enrollment": "TRE0GT7eh7Q",
"createdAt": "2019-08-21T13:28:00.056",
"createdAtClient": "2018-11-13T15:06:49.009",
"updatedAt": "2019-08-21T13:29:44.942",
"updatedAtClient": "2019-08-21T13:29:44.942",
"trackedEntity": "s4NfKOuayqG",
"program": "M3xtLkYBlKI",
"status": "COMPLETED",
"orgUnit": "DiszpKrYNg8",
"enrolledAt": "2023-11-13T00:00:00.000",
"occurredAt": "2023-11-13T00:00:00.000",
"followUp": false,
"deleted": false,
"storedBy": "healthworker1",
"notes": []
}
]
}
Point d'extrémité d'objet unique d'inscriptions GET /api/tracker/enrollments/{uid}¶
Le but de ce point d'extrémité est de récupérer une inscription en se basant sur son UID.
Syntaxe de la requête¶
GET /api/tracker/enrollment/{uid}
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
uid | String | uid | Renvoie l'inscription disposant de l'uid spécifié |
champs | String | Tout filtre de champ valide (par défaut *,!relationships,!events,!attributes) | Inclut |
| les sous-objets spécifiés dans la réponse |
Exemples de requêtes¶
Une requête pour une inscription:
GET /api/tracker/enrollments/JMgRZyeLWOo
Format de réponse¶
{
"enrollment": "JMgRZyeLWOo",
"createdAt": "2017-03-06T05:49:28.340",
"createdAtClient": "2016-03-06T05:49:28.340",
"updatedAt": "2017-03-06T05:49:28.357",
"trackedEntity": "PQfMcpmXeFE",
"program": "IpHINAT79UW",
"status": "ACTIVE",
"orgUnit": "DiszpKrYNg8",
"enrolledAt": "2024-03-06T00:00:00.000",
"occurredAt": "2024-03-04T00:00:00.000",
"followUp": false,
"deleted": false,
"notes": []
}
Événements (GET /api/tracker/events)¶
Deux points d'extrémité sont dédiés aux événements :
GET /api/tracker/events- récupère les événements correspondant aux critères donnés
GET /api/tracker/events/{id}- récupère un événement en fonction de l'identifiant fourni
If not otherwise specified, JSON is the default response for the GET method. The API also supports CSV export for single and collection endpoints. Furthermore, it supports compressed JSON and CSV for the collection endpoint.
Événements CSV¶
In the case of CSV, the fields request parameter has no effect, and the response will always contain the following fields:
- Événement (UID)
- statut (Chaîne)
- programme (UID)
- Étape de programme (UID)
- Inscription (UID)
- Unité d'organisation (UID)
- Survenue à ( date/heure)
- programmé à (date/heure)
- geometry (WKT, https://en.wikipedia.org/wiki/Well-known_text_representation_of_geometry. Vous pouvez l'omettre dans le cas d'un type de
Pointet si lalatitudeet lalongitudesont fournies) - latitude (Latitude d'un type de géométrie
Point) - longitude (Longitude d'un type de géométrie
Point) - suivi (booléen)
- supprimé (booléen)
- createdAt (Date et heure)
- createdAtClient (Date et heure)
- updatedAt (Date et heure)
- updatedAtClient (Date et heure)
- terminépar (Chaîne)
- terminéà (Date et heure)
- updatedBy (Nom d'utilisateur de l'utilisateur)
- attributeOptionCombo (combinaison d'options d'attribut) (UID)
- attributeCategoryOptions (options de catégorie d'attribut) (UID)
- assignedUser (Nom d'utilisateur de l'utilisateur)
- dataElement (Élément de données) (UID)
- valeur (Chaîne)
- stockéBy (Chaîne)
- providedElsewhere (Fourni ailleurs) (booléen)
- storedByDataValue (String) (stockéParValeurdeDonnée (Chaîne))
- createAtDataValue (Date et heure)
- updatedAtDataValue (Date et heure)
Voir Événements et Valeurs des données pour plus de détails sur les champs.
Événements GZIP¶
The response is file events.json.gz or events.csv.gzip containing the events.json or events.csv file.
Événements ZIP¶
The response is fileevents.json.gz or events.json.zip containing the events.json or events.csv file.
Point d'extrémité de la collecte d'événements GET /api/tracker/events¶
Renvoie une liste d'événements en fonction des filtres fournis.
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
programme | String | uid | Identifiant du programme |
programStage (étape de programme) | String | uid | Identifiant de l'étape de programme |
programStatus (statut de programme) | énumération | ACTIVE|COMPLETED|CANCELLED | Statut de l'événement dans le programme |
filtre | String | Valeurs des filtres d'éléments de données, séparées par des virgules | Narrows response to events matching given filters. A filter is a colon separated property or data element UID with optional operator and value pairs. Example: filter=fazCI2ygYkq:eq:PASSIVE with operator starts with eq followed by a value. A filter like filter=fazCI2ygYkq returns all events where the given data element has a value. Characters such as : (colon) or , (comma), as part of the filter value, need to be escaped by / (slash). Likewise, / needs to be escaped. Multiple operator/value pairs for the same property/data element like filter=qrur9Dvnyt5:gt:70:lt:80 are allowed. Repeating the same data element UID is not allowed. User needs access to the data element to filter on it. |
filterAttributes (attributs de filtres) | String | Valeurs des filtres d'attribut séparées par des virgules | Narrows response to TEIs matching given filters. A filter is a colon separated property or attribute UID with optional operator and value pairs. Example: filterAttributes=H9IlTX2X6SL:sw:A with operator starts with sw followed by a value. A filter like filterAttributes=H9IlTX2X6SL returns all events where the given attribute has a value. Special characters like + need to be percent-encoded so %2B instead of +. Characters such as : (colon) or , (comma), as part of the filter value, need to be escaped by / (slash). Likewise, / needs to be escaped. Multiple operator/value pairs for the same property/attribute like filterAttributes=AuPLng5hLbE:gt:438901703:lt:448901704 are allowed. Repeating the same attribute UID is not allowed. User needs access to the attribute to filter on it. |
followUp (suivi) | boolean | true|false | Détermine si l'événement est pris en compte pour un suivi dans le programme. La valeur par défaut est vrai |
trackedEntity | String | uid | Identifiant d'une entité suivie |
orgUnit | String | uid | Identifiant de l'unité d'organisation |
orgUnitMode see orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
ouMode est devenu obsolète et sera supprimé dans la version 42, utilisez orgUnitMode voir orgUnitModes | String | SELECTED|CHILDREN|DESCENDANTS|ACCESSIBLE|CAPTURE|ALL | Le mode de sélection des unités d'organisation peut l'être. La valeur par défaut est SÉLECTIONNÉ, qui fait uniquement référence aux unités d'organisation sélectionnées. |
statut | String | ACTIVE|COMPLETED|VISITED|SCHEDULE|OVERDUE|SKIPPED | Statut de l'événement |
occurredAfter (survenu après) | DateTime (date et heure) | ISO-8601 | Filtre pour les événements survenus après cette date. |
occurredBefore (survenu avant) | DateTime (date et heure) | ISO-8601 | Filtre pour les événements survenus jusqu'à cette date. |
scheduledAfter (programmé après) | DateTime (date et heure) | ISO-8601 | Filtre pour les événements programmés après cette date. |
scheduledBefore (programmé av | DateTime (date et heure) | ISO-8601 | Filtre pour les événements programmés avant cette date. |
updatedAfter (mis à jour après) | DateTime (date et heure) | ISO-8601 | Filtre pour les événements qui ont été mis à jour après cette date. Ne peut pas être utilisé avec updatedWithin (mis à jour pendant). |
updatedBefore (mis à jour avant) | DateTime (date et heure) | ISO-8601 | Filtre pour les événements qui ont été mis à jour jusqu'à cette date. Ne peut pas être utilisé avec updatedWithin. |
updatedWithin (mis à jour pendant) | Durée | ISO-8601 | Incluez uniquement les éléments mis à jour pendant la durée indiquée. Le format est ISO-8601#Duration |
enrollmentEnrolledAfter (Inscription après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de l’inscription au programme donné |
enrollmentEnrolledBefore (Inscription avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin de l’inscription au programme donné |
enrollmentOccurredAfter (Inscription survenue après) | DateTime (date et heure) | ISO-8601 | Date et heure de début de l'événement dans le programme donné |
enrollmentOccurredBefore (inscription survenue avant) | DateTime (date et heure) | ISO-8601 | Date et heure de fin des événements survenus dans le programme donné |
order | String | Liste de paires de noms de propriétés, d'attributs ou d'éléments de données UID et de directions de tri, séparées par des virgules, au format propName:sortDirection. | Champs pris en charge : assignedUser, assignedUserDisplayName, attributeOptionCombo, completedAt, completedBy, createdAt, createdAtClient, createdBy, deleted, enrolledAt, enrollment, enrollmentStatus, event, followUp, followup (deprecated), occurredAt, orgUnit, program, programStage, scheduledAt, status, storedBy, trackedEntity, updatedAt, updatedAtClient, updatedBy. |
events | String | Liste des UID des événements, séparée par des virgules. | Filtre le résultat pour obtenir un ensemble limité d’identifiants en utilisant event=id1,id2. |
eventest devenu obsolète et sera supprimé dans la version 42 ; utilisez events. | String | Liste de uid séparés par un point-virgule | Filtre le résultat pour obtenir un ensemble limité d’identifiants en utilisant event=id1,id2. |
attributeCategoryCombo (voir la remarque) | String | Identifiant de la combinaison de catégories d'attributs. Doit être combiné avec attributeCategoryOptions. | |
attributeCc est devenu obsolète et sera supprimé dans la version 42 ; utilisez attributeCategoryCombo | String | Identifiant de la combinaison de catégories d'attribut (doit être utilisé avec les options de catégorie d'attribut (attributCos)) | |
attributeCategoryOptions (voir la remarque) | String | Identifiants d'options de catégories d'attributs séparés par des virgules. Doit être combiné avec attributeCategoryCombo. | |
attributeCos est devenu obsolète et sera supprimé dans la version 42 ; utilisez attributeCategoryOptions | String | Identifiants d'options de catégories d'attributs séparés par des points-virgules. Doit être combiné avec attributeCc. | |
includeDeleted (inclure les éléments supprimés) | Boolean | S'il est défini sur "vrai", les événements supprimés de façon réversible seront inclus dans le résultat de votre requête. | |
assignedUserMode (mode d'utilisateur assigné) | String | CURRENT|PROVIDED|NONE|ANY | Mode de sélection de l'utilisateur assigné |
assignedUsers | String | Liste des UID d'utilisateurs séparés par des virgules, à filtrer sur la base des événements affectés aux utilisateurs. | Il est possible de filtrer le résultat pour obtenir un ensemble limité d'entités suivies avec des événements attribués aux UID donnés, à l'aide du paramètre assignedUser=id1;id2. Ce paramètre ne sera pris en compte que si le mode d'utilisateur assigné est FOURNI ou nul. L'API va générer une erreur si, par exemple, assignedUserMode=CURRENT et assignedUser=someId |
assignedUser est devenu obsolète et sera supprimé dans la version 42 ; utilisez assignedUsers. | String | Liste des UID d'utilisateurs séparés par des points virgules, à filtrer sur la base des événements affectés aux utilisateurs. | Il est possible de filtrer le résultat pour obtenir un ensemble limité d'entités suivies avec des événements attribués aux UID donnés, à l'aide du paramètre assignedUser=id1;id2. Ce paramètre ne sera pris en compte que si le "mode d'utilisateur assigné" est FOURNI ou nul. L'API va générer une erreur si, par exemple, assignedUserMode=CURRENT et assignedUser=someId |
Remarque
Si la requête ne contient ni
attributeCategoryOptionsniattributeCategoryOptions, le serveur renvoie des événements pour toutes les combinaisons d'options d'attribut pour lesquelles l'utilisateur a un accès en lecture.
Exemples de requêtes¶
La requête pour tous les événements associés aux subordonnées d'une unité d'organisation donnée :
GET /api/tracker/events?orgUnit=YuQRtpLP10I&orgUnitMode=CHILDREN
La requête pour tous les événements associés à tous les descendants d'une unité d'organisation donnée, c'est-à-dire toutes les unités d'organisation qui lui sont inférieurs dans la hiérarchie :
GET /api/tracker/events?orgUnit=O6uvpzGd5pu&orgUnitMode=DESCENDANTS
Requête pour tous les événements associés à un programme et à une unité d'organisation :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc
La requête pour tous les événements disposant d'un programme et d'une unité d'organisation, ordonnés par date programmée en ordre croissant :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc&order=scheduledAt
La requête pour les 10 événements dont la date de déroulement est la plus récente dans un programme et une unité d'organisation donné - par pagination et ordonnés par date de déroulement en ordre décroissant :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc&order=occurredAt:desc&pageSize=10&page=1
La requête pour tous les événements avec un programme et une unité d'organisation pour une entité suivie donnée :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=M3xtLkYBlKI&trackedEntity=dNpxRu1mWG5
Recherche de tous les événements antérieurs ou égaux à 2024-02-03 qui sont liés à un programme et à une unité d'organisation :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=eBAyeGv0exc&occurredBefore=2024-02-03
Une requête dans laquelle plusieurs opérandes et filtres sont spécifiés pour un UID d'élément de données :
GET /api/tracker/events?orgUnit=g8upMTyEZGZ&program=M3xtLkYBlKI&filter=rFQNCGMYud2:GT:35&filter=rFQNCGMYud2:LT:50
Un filtre de requête avec une valeur qui doit être échappée et qui sera interprétée comme :,/ :
GET /api/tracker/events?orgUnit=DiszpKrYNg8&program=lxAQ7Zs9VYR&filter=DanTR5x0WDK:EQ:/:/,//
Exemple de réponse des événements¶
L'API prend en charge les réponses CSV et JSON pour GET /api/tracker/events.
JSON¶
La réponse JSON peut ressembler à ce qui suit:
{
"pager": {
"page": 1,
"pageSize": 1
},
"events": [
{
"event": "A7rzcnZTe2T",
"status": "ACTIVE",
"program": "eBAyeGv0exc",
"programStage": "Zj7UnCAulEk",
"enrollment": "RiLEKhWHlxZ",
"orgUnit": "DwpbWkiqjMy",
"occurredAt": "2023-02-13T00:00:00.000",
"scheduledAt": "2023-02-13T00:00:00.000",
"followUp": false,
"deleted": false,
"createdAt": "2017-09-08T21:40:22.000",
"createdAtClient": "2016-09-08T21:40:22.000",
"updatedAt": "2017-09-08T21:40:22.000",
"attributeOptionCombo": "HllvX50cXC0",
"attributeCategoryOptions": "xYerKDKCefk",
"geometry": {
"type": "Point",
"coordinates": [
-11.468912037323042,
7.515913998868316
]
},
"dataValues": [
{
"createdAt": "2016-12-06T18:22:34.438",
"updatedAt": "2016-12-06T18:22:34.438",
"storedBy": "bjorn",
"providedElsewhere": false,
"dataElement": "F3ogKBuviRA",
"value": "[-11.4880220438585,7.50978830548003]"
},
{
"createdAt": "2013-12-30T14:23:57.423",
"updatedAt": "2013-12-30T14:23:57.423",
"storedBy": "lars",
"providedElsewhere": false,
"dataElement": "eMyVanycQSC",
"value": "2018-02-07"
},
{
"createdAt": "2013-12-30T14:23:57.382",
"updatedAt": "2013-12-30T14:23:57.382",
"storedBy": "lars",
"providedElsewhere": false,
"dataElement": "oZg33kd9taw",
"value": "Male"
}
],
"notes": [],
"followup": false
}
]
}
CSV¶
La réponse CSV peut ressembler à ce qui suit:
event,status,program,programStage,enrollment,orgUnit,occurredAt,scheduledAt,geometry,latitude,longitude,followUp,deleted,createdAt,createdAtClient,updatedAt,updatedAtClient,completedBy,completedAt,updatedBy,attributeOptionCombo,attributeCategoryOptions,assignedUser,dataElement,value,storedBy,providedElsewhere,storedByDataValue,updatedAtDataValue,createdAtDataValue
A7rzcnZTe2T,ACTIVE,eBAyeGv0exc,Zj7UnCAulEk,RiLEKhWHlxZ,DwpbWkiqjMy,2023-02-12T23:00:00Z,2023-02-12T23:00:00Z,"POINT (-11.468912037323042 7.515913998868316)",7.515913998868316,-11.468912037323042,false,false,2017-09-08T19:40:22Z,,2017-09-08T19:40:22Z,,,,,HllvX50cXC0,xYerKDKCefk,,F3ogKBuviRA,"[-11.4880220438585,7.50978830548003]",admin,false,,2016-12-06T17:22:34.438Z,2016-12-06T17:22:34.438Z
A7rzcnZTe2T,ACTIVE,eBAyeGv0exc,Zj7UnCAulEk,RiLEKhWHlxZ,DwpbWkiqjMy,2023-02-12T23:00:00Z,2023-02-12T23:00:00Z,"POINT (-11.468912037323042 7.515913998868316)",7.515913998868316,-11.468912037323042,false,false,2017-09-08T19:40:22Z,,2017-09-08T19:40:22Z,,,,,HllvX50cXC0,xYerKDKCefk,,eMyVanycQSC,2018-02-07,admin,false,,2013-12-30T13:23:57.423Z,2013-12-30T13:23:57.423Z
A7rzcnZTe2T,ACTIVE,eBAyeGv0exc,Zj7UnCAulEk,RiLEKhWHlxZ,DwpbWkiqjMy,2023-02-12T23:00:00Z,2023-02-12T23:00:00Z,"POINT (-11.468912037323042 7.515913998868316)",7.515913998868316,-11.468912037323042,false,false,2017-09-08T19:40:22Z,,2017-09-08T19:40:22Z,,,,,HllvX50cXC0,xYerKDKCefk,,msodh3rEMJa,2018-02-13,admin,false,,2013-12-30T13:23:57.467Z,2013-12-30T13:23:57.467Z
Point d'extrémité d'objet unique d'événements GET /api/tracker/events/{uid}¶
Le but de ce point d'extrémité est de récupérer un événement en se basant sur son UID.
Syntaxe de la requête¶
GET /api/tracker/events/{uid}?fields={fields}
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
uid | String | uid | Renvoie l'événement disposant de l'uid spécifié |
champs | String | Tout filtre de champ valide (par défaut *,!relationships) | Inclut les sous-objets spécifiés dans la réponse |
Exemples de requêtes¶
Une requête pour un événement :
GET /api/tracker/events/rgWr86qs0sI
Exemple de réponse d'un événement¶
The API supports CSV and JSON response for GET /api/tracker/trackedEntities
JSON¶
{
"event": "rgWr86qs0sI",
"status": "ACTIVE",
"program": "kla3mAPgvCH",
"programStage": "aNLq9ZYoy9W",
"enrollment": "Lo3SHzCnMSm",
"orgUnit": "DiszpKrYNg8",
"occurredAt": "2024-10-12T00:00:00.000",
"followUp": false,
"deleted": false,
"createdAt": "2018-10-20T12:09:19.492",
"createdAtClient": "2017-10-20T12:09:19.492",
"updatedAt": "2018-10-20T12:09:19.492",
"attributeOptionCombo": "amw2rQP6r6M",
"attributeCategoryOptions": "RkbOhHwiOgW",
"dataValues": [
{
"createdAt": "2015-10-20T12:09:19.640",
"updatedAt": "2015-10-20T12:09:19.640",
"storedBy": "system",
"providedElsewhere": false,
"dataElement": "HyJL2Lt37jN",
"value": "12"
}
],
"notes": [],
"followup": false
}
CSV¶
The response will be the same as the collection endpoint but referring to a single event, although it might have multiple rows for each data element value.
Event data value change logs¶
GET /api/tracker/events/{uid}/changeLogs
This endpoint retrieves change logs for the data values of a specific event. It returns a list of all event data values that have changed over time for that particular event.
| Paramètre | Type | Valeurs autorisées |
|---|---|---|
path /{uid} | String | Event UID. |
Event data value change logs response example¶
Exemple de réponse json :
{
"pager":{
"page":1,
"pageSize":10
},
"changeLogs":[
{
"createdBy":{
"uid":"AIK2aQOJIbj",
"username":"tracker",
"firstName":"Tracker demo",
"surname":"User"
},
"createdAt":"2024-06-20T15:43:36.342",
"type":"DELETE",
"change":{
"dataValue":{
"dataElement":"UXz7xuGCEhU",
"previousValue":"12"
}
}
},
{
"createdBy":{
"uid":"AIK2aQOJIbj",
"username":"tracker",
"firstName":"Tracker demo",
"surname":"User"
},
"createdAt":"2024-06-20T15:43:27.175",
"type":"CREATE",
"change":{
"dataValue":{
"dataElement":"UXz7xuGCEhU",
"currentValue":"12"
}
}
},
{
"createdBy":{
"uid":"AIK2aQOJIbj",
"username":"tracker",
"firstName":"Tracker demo",
"surname":"User"
},
"createdAt":"2024-06-20T14:51:16.433",
"type":"UPDATE",
"change":{
"dataValue":{
"dataElement":"bx6fsa0t90x",
"previousValue":"true",
"currentValue":"false"
}
}
}
]
}
The change log type can be CREATE, UPDATE, or DELETE. CREATE and DELETE will always hold a single value: the former shows the current value, and the latter shows the value that was deleted. UPDATE will hold two values: the previous and the current.
Relations (GET /api/tracker/relationships)¶
Les relations sont des liens entre deux entités dans le Tracker. Ces entités peuvent être des entités suivies, des inscriptions et des événements.
Le but de ce point d'extrémité est de récupérer les relations entre les objets.
Contrairement aux autres points d'extrémité d'objets suivis, les relations n'exposent qu'un seul point d'extrémité :
GET /api/tracker/relationships?[trackedEntity={trackedEntityUid}|enrollment={enrollmentUid}|event={eventUid}]&fields=[fields]
Paramètres de requête¶
| Paramètre de requête | Type | Valeurs autorisées | Description |
|---|---|---|---|
trackedEntity | String | uid | Identifiant d'une entité suivie |
enrollment | String | uid | Identifiant d'une inscription |
event | String | uid | Identifiant d'un événement |
champs | String | Tout filtre de champ valide (par défaut relationship,relationshipType,createdAtClient,from[trackedEntity[trackedEntity],enrollment[enrollment],event[event]],to[trackedEntity[trackedEntity],enrollment[enrollment],event[event]]) | Inclut les sous-objets spécifiés dans la réponse |
order | String | Liste séparée par des virgules de paires de noms de propriétés, d'attributs ou d'UID et de directions de tri au format propName:sortDirection. | Champs pris en charge : createdAt, createdAtClient. |
includeDeleted (inclure les éléments supprimés) | Boolean | true|false | détermine s'il faut inclure dans le résultat de votre requête, des éléments supprimés mais pas définitivement |
Les règles suivantes s'appliquent aux paramètres de requête.
- un seul paramètre parmi
trackedEntity,enrollmenteteventpeut être transmis
NOTE
Using
trackedEntity,enrollmentoreventparams, will return any relationship where the trackedEntity, enrollment or event is part of the relationship (either from or to). As long as the user has access to it.
Exemple de réponse¶
{
"pager": {
"page": 1,
"pageSize": 2
},
"relationships": [
{
"relationship": "oGtgtJpp6fG",
"relationshipType": "Mv8R4MPcNcX",
"from": {
"trackedEntity": {
"trackedEntity": "neR4cmMY22o"
}
},
"to": {
"trackedEntity": {
"trackedEntity": "DsSlC54GNXy"
}
}
},
{
"relationship": "SSfIicJKbh5",
"relationshipType": "Mv8R4MPcNcX",
"from": {
"trackedEntity": {
"trackedEntity": "neR4cmMY22o"
}
},
"to": {
"trackedEntity": {
"trackedEntity": "rEYUGH97Ssd"
}
}
}
]
}
Contrôle de l'accès au Tracker¶
Le Tracker dispose de quelques concepts en ce qui concerne le contrôle d'accès, tels que le partage, les champs d'application des unités d'organisation, la propriété et les niveaux d'accès. Les sections suivantes fournissent une brève introduction aux différents sujets.
Partage de métadonnées¶
Le paramètre de partage est une fonctionnalité standard de DHIS2 qui s'applique aux métadonnées/données du Tracker et de l'Agrégé, ainsi qu'aux tableaux de bord et aux éléments de visualisation. Au cœur du partage se trouve la possibilité de définir qui peut voir/faire quoi. En général, il existe cinq configurations de partage possibles : aucun accès, lecture des métadonnées, écriture des métadonnées, lecture des données et écriture des données. Ces configurations d'accès peuvent être accordées au niveau de l'utilisateur et/ou du groupe d'utilisateurs (pour plus de flexibilité). En ce qui concerne le Tracker, les métadonnées suivantes et leur configuration de partage sont d'une importance particulière : Élément de données, option de catégorie, programme, étape de programme, type d'entité suivie, attribut d'entité suivie, ainsi que les tableaux de bord et les éléments de tableau de bord liés au Tracker.
Le fonctionnement des paramètres de partage est simple : les paramètres sont appliqués lors des processus d'importation/exportation des données Tracker. Pour lire des valeurs, il faut disposer d'un accès en lecture aux données. Un utilisateur qui souhaite modifier des données doit disposer d'un accès en écriture. De même, un utilisateur qui souhaite modifier des métadonnées doit disposer d'un accès en écriture aux métadonnées.
Un point essentiel concernant les données Tracker est la nécessité d'adopter une approche holistique. Par exemple, un utilisateur ne pourra pas voir la valeur de l'élément de données s'il n'a accès qu'à l'élément de données en lecture. L'utilisateur doit disposer d'un accès en lecture aux données pour accéder au stade du programme parent et au programme auquel l'élément de données appartient. Il en va de même pour la combinaison d'options de catégorie. Dans Tracker, l'événement est lié à AttributeOptionCombo, qui se compose d'une combinaison d'options de catégorie. Par conséquent, pour qu'un utilisateur puisse lire les données d'un événement, il doit avoir un accès en lecture à toutes les options de catégorie et aux catégories correspondantes qui constituent la combinaison d'options d'attributs de l'événement en question. Si un utilisateur n'a pas accès à une seule option de catégorie ou à une seule catégorie, il n'a pas accès à l'ensemble de l'événement.
Lorsqu'il s'agit d'accéder aux données d'inscription, il est essentiel d'avoir d'abord accès à l'entité suivie. L'accès à une entité suivie est contrôlé par le partage des paramètres du programme, du type d'entité suivie et de l'attribut d'entité suivie. Une fois que l'on a accédé à l'inscription, il est possible d'accéder aux données d'événement, là encore en fonction de l'étape du programme et des paramètres de partage des éléments de données.
Un autre point essentiel à prendre en considération est la manière de définir l'accès aux différentes étapes d'un programme. Il peut arriver que nous devions accorder l'accès à une étape spécifique - par exemple, « Résultat de laboratoire » - à un groupe d'utilisateurs spécifique (techniciens de laboratoire). Dans ce cas, nous pouvons accorder un accès en écriture aux données de l'étape « Résultat du laboratoire », probablement un accès en lecture à une ou plusieurs étapes au cas où nous voudrions que les techniciens de laboratoire lisent d'autres résultats médicaux, ou aucun accès si nous pensons qu'il n'est pas nécessaire qu'ils consultent des données autres que celles relatives au laboratoire.
En résumé, DHIS2 dispose d'un paramètre de partage très précis que nous pouvons utiliser pour implémenter les mécanismes de contrôle d'accès au niveau des données et des métadonnées. Ces paramètres de partage peuvent être appliqués directement au niveau de l'utilisateur ou du groupe d'utilisateurs. Le paramètre de partage à appliquer dépend du cas d'utilisation.
Pour plus d'informations sur le partage de données, consultez Partage de données.
Champs d'application de l'unité d'organisation¶
Les unités d'organisation font partie des objets les plus fondamentaux de DHIS2. Elles définissent un univers dans lequel un utilisateur est autorisé à enregistrer et/ou à lire des données. Trois types d'unités d'organisation peuvent être attribués à un utilisateur. Il s'agit de la saisie de données, de la consultation de données (non utilisé dans le tracker) et de la recherche Tracker. Comme leur nom l'indique, ces unités d'organisation définissent un champ d'application dans lequel un utilisateur est autorisé à effectuer les opérations requises.
Cependant, pour mieux affiner le champ d'application, DHIS2 Tracker introduit un concept que nous appelons OrganisationUnitSelectionMode (mode de sélection de l'unité d'organisation). Ce mode est souvent utilisé lors de l'exportation d'objets Tracker. Par exemple, si un utilisateur dispose d'un champ de recherche particulier, cela signifie-t-il que nous devons utiliser ce champ chaque fois que l'utilisateur tente de rechercher un objet Tracker, d'inscription ou d'événement ? Ou bien l'utilisateur souhaite-t-il limiter la recherche à l'unité d'organisation sélectionnée, ou à l'ensemble de l'unité d'organisation de saisie, etc.
Les utilisateurs peuvent affiner un champ d'application en transmettant une valeur spécifique de orgUnitMode (mode d'unité d'organisation) dans leur requête API:
api/tracker/trackedEntities?orgUnit=UID&orgUnitMode=specific_organisation_unit_selection_mode
Actuellement, six modes de sélection sont disponibles: SÉLECTIONNÉ, SUBORDONNÉES, DESCENDANTS, SAISIE, ACCESSIBLE et TOUS.
- SÉLECTIONNÉ : Comme son nom l'indique, ce mode limite toutes les opérations lancées par l'API qui effectue la demande à l'unité d'organisation spécifiée dans la requête.
- SUBORDONNÉES : Dans ce mode, le périmètre de l'unité d'organisation est construit à partir de l'unité d'organisation sélectionnée et de ses subordonnées immédiates, c'est-à-dire les unités d'organisation du niveau inférieur.
- DESCENDANTS : Dans ce mode, l'unité d'organisation sélectionnée et tout ce qui se trouve en dessous d'elle, englobant non seulement les descendants immédiats mais aussi toutes les subordonnées, constituent l'univers d'exploitation des données.
- SAISIE : Ce mode inclut les unités d'organisation de saisie des données associées à l'utilisateur actuel et à tous ses descendants. Il englobe toutes les unités d'organisation de la sous-hiérarchie.
- ACCESSIBLE : Ce mode est conçu pour récupérer des données dans les unités d'organisation du champ de recherche de l'utilisateur. Cela comprend tout ce qui est visible par l'utilisateur, y compris les programmes ouverts et audités dans son champ de recherche, ainsi que les données des programmes protégés et fermés dans le champ de saisie de l'utilisateur. Si un utilisateur n'a pas d'unités d'organisation de recherche, le système passe par défaut au champ de saisie, ce qui garantit que l'utilisateur a toujours accès à au moins un univers. Le champ de saisie, qui est obligatoire, sert d'élément fondamental pour garantir un environnement de données à l'utilisateur.
- TOUS : Ce mode est réservé aux utilisateurs autorisés, notamment ceux ayant l'autorité TOUS (super utilisateurs). Les utilisateurs ayant l'autorité F_TRACKED_ENTITY_INSTANCE_SEARCH_IN_ALL_ORGUNITS peuvent également effectuer des recherches dans l'ensemble du système, mais doivent partager l'accès au programme, à l'étape du programme et/ou au type d'entité suivi. Pour les utilisateurs non autorisés, une exception sera levée.
Les trois premiers modes, SÉLECTIONNÉ, ASCENDANTS et DESCENDANTS attendent qu'une unité d'organisation soit fournie dans la demande, tandis que les trois derniers, SAISIE, ACCESSIBLE et TOUS ne l'attendent pas et, en fait, la requête échouera si une unité d'organisation est fournie.
Le mode d'unité d'organisation sera l'un des modes énumérés ci-dessus s'il est explicitement fourni dans la demande d'API. Comme il ne s'agit pas d'un champ obligatoire, s'il n'est pas spécifié, la valeur par défaut sera SÉLECTIONNÉ si une unité d'organisation est présente, et ACCESSIBLE dans le cas contraire.
Il n'est pas judicieux de transmettre ces modes lors des opérations d'importation du Tracker. En effet, lors de l'écriture des données Tracker, chaque objet doit être rattaché à une unité d'organisation spécifique. Le système vérifiera alors si chacune des unités d'organisation mentionnées relève du champ d'application de la SAISIE. Si ce n'est pas le cas, le système rejettera simplement l'opération d'écriture.
Notez qu'il existe 4 types d'associations d'unités d'organisation pour les objets Tracker. Une entité suivie a une unité d'organisation, communément appelée unité d'organisation d'enregistrement. Les inscriptions ont une unité d'organisation qui leur est associée, pareil pour les événements. Pour finir, il existe également une unité d'organisation "propriétaire" pour une combinaison Entité Suivie-Programme.
Lors de la récupération des objets Tracker, selon le contexte, le champ d'application de l'unité d'organisation est appliquée à l'une des quatre associations d'unités d'organisation ci-dessus.
Par exemple, lors de la récupération d'entités suivies en dehors d'un programme, le champ d'application de l'unité d'organisation est appliquée à l'unité d'organisation d'enregistrement de l'entité suivie. Par contre, lors de la récupération d'entités suivies, en plus de données de programme spécifiques, le champ d'application de l'unité d'organisation est appliquée à l'unité d'organisation "propriétaire".
Propriété du programme Tracker¶
Un nouveau concept appelé Propriété du Tracker est introduit depuis la version 2.30. Il s'agit d'une nouvelle association d'unités d'organisation pour une combinaison Entité Suivie - Programme. Nous l'appelons l'Unité d'Organisation (Propriétaire) d'une Entité Suivie dans le cadre d'un Programme. L'unité d'organisation Propriétaire est utilisée pour définir les accès lors de la lecture et de l'écriture des données Tracker associées à un programme. Cette unité d'organisation, conjointement avec la configuration Niveau d'accès du programme, décide de l'accès aux données liées au programme (inscriptions et événements). Un utilisateur peut accéder aux données du programme d'une entité suivie si l'unité d'organisation propriétaire correspondante pour cette combinaison 'Entité suivie-Programme' se trouve dans le champ d'application de l'unité d'organisation de l'utilisateur (Recherche/Saisie). Pour les programmes configurés avec le niveau d'accès OUVERT ou AUDITÉ, l'unité d'organisation propriétaire doit se trouver dans le champ d'application de recherche de l'utilisateur. Pour les programmes configurés avec le niveau d'accès PROTÉGÉ ou * FERMÉ*, l'unité d'organisation propriétaire doit se trouver dans le champ d'application de saisie de l'utilisateur pour que ce dernier puisse accéder aux données de programme correspondantes pour l'entité suivie en question. Indépendamment du niveau d'accès au programme, pour accéder aux objets Tracker, l'unité d'organisation demandée doit toujours se trouver dans le champ de recherche de l'utilisateur. Un utilisateur ne peut pas demander des objets en dehors de son champ de recherche, à moins qu'il n'utilise le mode unité d'organisation TOUS et qu'il ait suffisamment de privilèges pour utiliser ce mode.
When requesting tracked entities without specifying a program, the response will include only tracked entities that satisfy metadata sharing settings and one of the following criteria: - The tracked entity is enrolled in at least one program the user has data access to, and the user has access to the owner organisation unit. - The tracked entity is not enrolled in any program the user has data access to, but the user has access to the tracked entity registering organisation unit.
Tracker Ownership Override: Break the Glass¶
It is possible to temporarily override the ownership privilege for a program that is configured with an access level of PROTECTED. Any user with the org unit owner within their search scope, can temporarily access the program-related data by providing a reason for accessing it.
This act of temporarily gaining access is termed breaking the glass. Currently, temporary access is granted for 3 hours. DHIS2 audits breaking the glass along with the reason specified by the user. It is not possible to gain temporary access to a program that has been configured with an access level of CLOSED.
To break the glass for a TrackedEntity-Program combination, the following POST request can be used:
/api/tracker/ownership/override?trackedEntity=DiszpKrYNg8&program=eBAyeGv0exc&reason=patient+showed+up+for+emergency+care
Transfert de la propriété du Tracker¶
Il est possible de transférer la propriété d'une combinaison Entité suivie - Programme d'une unité d'organisation à une autre. Cela peut s'avérer utile en cas de transfert de patients ou de migration. Seul un utilisateur disposant d'un accès à la propriété (ou d'un accès temporaire en brisant la glace) peut transférer la propriété. Pour transférer la propriété d'une combinaison Entité suivie - Programme à une autre unité d'organisation, la requête "PUT" suivante peut être utilisée :
/api/tracker/ownership/transfer?trackedEntity=DiszpKrYNg8&program=eBAyeGv0exc&ou=EJNxP3WreNP
Niveau d'accès¶
DHIS2 traite les données Tracker avec un niveau de protection supplémentaire. En plus de la protection standard des métadonnées et des données via les paramètres de partage, les données Tracker sont protégées par des mécanismes supplémentaires en matière de niveau d'accès. Actuellement, quatre niveaux d'accès peuvent être configurés pour un programme : Ouvert, Audité, Protégé et Fermé.
Ces niveaux d'accès ne sont déclenchés que lorsque les utilisateurs tentent d'interagir avec les données du programme, c'est-à-dire les données relatives aux inscriptions et aux événements. La configuration des différents niveaux d'accès du programme correspond à un degré d'ouverture (ou de fermeture) des données du programme. Notez que tous les autres paramètres de partage sont toujours respectés et que le niveau d'accès n'est qu'une couche supplémentaire de contrôle d'accès. Voici une brève description des quatre niveaux d'accès qui peuvent être configurés pour un programme.
Ouvrir¶
Ce niveau d'accès est le moins restrictif des niveaux d'accès. Les utilisateurs peuvent accéder aux données d'un programme OUVERT et les modifier si l'unité d'organisation propriétaire fait partie du champ de recherche de l'utilisateur. Avec ce niveau d'accès, il est possible d'accéder à des données qui se trouvent hors du champ de saisie et de les modifier sans justification ni conséquence.
Audité¶
Il s'agit du même niveau d'accès que le niveau Ouvert. La différence est que le système ajoutera automatiquement une entrée dans le journal d'audit sur les données auxquelles l'utilisateur accède.
Protégé¶
Ce niveau d'accès est légèrement plus restreint. Les données contenues dans un programme PROTÉGÉ ne peuvent être consultées par les utilisateurs que si l'unité d'organisation propriétaire fait partie du champ de saisie de l'utilisateur donnée. Cependant, un utilisateur qui n'a que l'unité d'organisation propriétaire dans son champ de recherche peut en obtenir la propriété temporaire en [brisant la glace] (#webapi_nti_tracker_ownership_override). L'utilisateur doit fournir une justification avant d'accéder aux données en question. Le système enregistre alors la justification et l'audit d'accès et accorde à l'utilisateur un accès temporaire de 3 heures. Notez que si le concept "briser la glace" est appliqué, l'unité d'organisation propriétaire reste inchangée et seul l'utilisateur qui a brisé la glace bénéficie de l'accès temporaire.
Fermé¶
Il s'agit du niveau d'accès le plus restreint. Les données enregistrées pour le compte de programmes configurés avec le niveau d'accès FERMÉ ne seront pas accessibles si l'unité d'organisation propriétaire n'est pas dans le champ de saisie de l'utilisateur. Il est également impossible de briser la vitre ou d'obtenir une propriété temporaire dans cette configuration. Notez qu'il est toujours possible de transférer la propriété à une autre unité d'organisation. Seul un utilisateur ayant accès à ces données peut transférer la propriété d'une combinaison Entité Suivie - Programme à une autre unité d'organisation. Si la propriété est transférée, l'unité d'organisation propriétaire est mise à jour.