Documentation FHIR R4 — Système de Surveillance SBE

1. Sélection des ressources

1.1 Contexte et objectifs

Ce document décrit l’implémentation FHIR R4 pour le système de surveillance épidémiologique basé sur les 4 piliers (SBEc) de PIVOT Madagascar, couvrant le district sanitaire d”Ifanadiana.

La sélection des ressources FHIR a été guidée par les objectifs suivants :

  • Surveillance épidémiologique : détection et suivi des signaux sanitaires

  • Gestion de la hiérarchie géographique : District > Commune > CSB > Fokontany

  • Évaluation des risques sanitaires (SBEc_Evaluation)

  • Communication des alertes entre les niveaux du système de santé

  • Suivi des substances et agents pathogènes

  • Regroupement des cas et populations à risque

1.2 Ressources FHIR sélectionnées

Ressources FHIR R4 sélectionnées pour le système SBEc

Ressource FHIR

Usage dans SBEc

Référence HL7

Location

Hiérarchie géographique (District, Commune, CSB, Fokontany)

hl7.org/fhir/R4/location.html

Observation

Signaux épidémiologiques (date détection, survenue, nb cas/décès)

hl7.org/fhir/R4/observation.html

Group

Regroupement de cas, populations à risque

hl7.org/fhir/R4/group.html

RiskAssessment

SBEc_Evaluation — Évaluation des risques

hl7.org/fhir/R4/riskassessment.html

Substance

Agents pathogènes, substances dangereuses

hl7.org/fhir/R4/substance.html

Communication

Alertes et communications entre acteurs

hl7.org/fhir/R4/communication.html

Patient

Identification des patients

hl7.org/fhir/R4/patient.html

Encounter

Consultations et visites

hl7.org/fhir/R4/encounter.html

Condition

Diagnostics (ICD-10)

hl7.org/fhir/R4/condition.html

MedicationRequest

Prescriptions médicamenteuses

hl7.org/fhir/R4/medicationrequest.html

1.3 Relations entre ressources

Relations clés entre ressources FHIR

Ressource source

Champ

Ressource cible

Description

Observation (Signal)

subject

Location

Lieu de survenue du signal

Observation (Signal)

focus

Group

Groupe de cas associé

RiskAssessment

basis

Observation (Signal)

Signal évalué

RiskAssessment

subject

Group

Population/groupe évalué

Communication

payload/reference

RiskAssessment

Évaluation communiquée

Communication

about

Observation (Signal)

Signal concerné

Group

member

Patient

Patients du groupe

Substance

(référencé par)

Observation

Agent pathogène identifié

1.4 Flux de données SBEc

L’architecture SBEc repose sur une pyramide de ressources FHIR interconnectées. Voici l’ordre logique du flux de données :

1. Location       ──► Définit la hiérarchie géographique
                      District → Commune → CSB → Fokontany

2. Observation    ──► Signal épidémiologique détecté à un lieu donné
   (Signal)

3. Group          ──► Les cas sont regroupés par événement/localisation

4. RiskAssessment ──► L'évaluation SBEc est réalisée sur le signal

5. Substance      ──► Identification de l'agent causal (si applicable)

6. Communication  ──► Alerte et notification aux autorités sanitaires

2. Endpoints des API REST

Note

Toutes les URL sont relatives à la base URL : http://[serveur]/fhir/

2.1 Location — Hiérarchie géographique

Endpoints REST — Location

Opération

Méthode

URL

Description

Lister les districts

GET

/Location?type=district

Tous les districts

Communes d’un district

GET

/Location?type=commune&partof=Location/district-ifanadiana

Communes du district Ifanadiana

CSB d’une commune

GET

/Location?type=csb&partof=Location/commune-kelilalina

CSB de la commune Kelilalina

Fokontany d’une commune

GET

/Location?type=fokontany&partof=Location/commune-kelilalina

Fokontany de Kelilalina

Lire un lieu

GET

/Location/{id}

Détail d’un lieu par son ID

Créer un lieu

POST

/Location (body JSON)

Création d’un nouveau lieu

Modifier un lieu

PUT

/Location/{id} (body JSON)

Mise à jour complète

2.2 Observation — Signaux épidémiologiques

Endpoints REST — Observation (Signaux)

Opération

Méthode

URL

Description

Tous les signaux

GET

/Observation?category=signal-epidemiologique

Liste de tous les signaux

Signaux immédiats

GET

/Observation?category=signal-epidemiologique&signal-type=SIGNAL_IMMEDIAT

Signaux nécessitant une alerte immédiate

Signaux d’un fokontany

GET

/Observation?category=signal-epidemiologique&subject=Location/fokontany-tsaratanana

Signaux d’un lieu donné

Signaux sur une période

GET

/Observation?category=signal-epidemiologique&date=ge2026-05-01&date=le2026-05-31

Signaux dans un intervalle de dates

Lire un signal

GET

/Observation/{id}

Détail d’un signal par son ID

Créer un signal

POST

/Observation (body JSON)

Création d’un nouveau signal

Modifier un signal

PUT

/Observation/{id} (body JSON)

Mise à jour d’un signal

2.3 Group — Regroupement

Endpoints REST — Group

Opération

Méthode

URL

Description

Tous les groupes

GET

/Group

Liste de tous les groupes

Groupes actifs

GET

/Group?active=true

Groupes actuellement actifs

Lire un groupe

GET

/Group/{id}

Détail d’un groupe par son ID

Créer un groupe

POST

/Group (body JSON)

Création d’un nouveau groupe

Modifier un groupe

PUT

/Group/{id} (body JSON)

Mise à jour d’un groupe

2.4 RiskAssessment — SBEc_Evaluation

Endpoints REST — RiskAssessment

Opération

Méthode

URL

Description

Toutes les évaluations

GET

/RiskAssessment

Liste de toutes les évaluations SBEc

Évaluations à risque élevé

GET

/RiskAssessment?risk-level=high

Évaluations avec risque élevé

Évaluation d’un signal

GET

/RiskAssessment?basis=Observation/signal-palu-001

Évaluation liée à un signal

Lire une évaluation

GET

/RiskAssessment/{id}

Détail d’une évaluation

Créer une évaluation

POST

/RiskAssessment (body JSON)

Création d’une évaluation SBEc

2.5 Substance

Endpoints REST — Substance

Opération

Méthode

URL

Description

Toutes les substances

GET

/Substance

Liste de toutes les substances/agents

Substances biologiques

GET

/Substance?category=biological

Agents pathogènes uniquement

Lire une substance

GET

/Substance/{id}

Détail d’une substance

Créer une substance

POST

/Substance (body JSON)

Ajout d’un nouvel agent pathogène

2.6 Communication — Alertes

Endpoints REST — Communication

Opération

Méthode

URL

Description

Toutes les alertes

GET

/Communication?category=alert

Liste de toutes les alertes

Alertes urgentes

GET

/Communication?category=alert&priority=urgent

Alertes de priorité urgente

Alertes d’un praticien

GET

/Communication?sender=Practitioner/med-district-001

Alertes envoyées par un praticien

Lire une communication

GET

/Communication/{id}

Détail d’une communication

Envoyer une alerte

POST

/Communication (body JSON)

Création d’une nouvelle alerte

2.7 Ressources cliniques — Patient, Encounter, Condition, MedicationRequest

Endpoints REST — Ressources cliniques (4 piliers)

Opération

Méthode

URL

Description

Patient par identifiant PIVOT

GET

/Patient?identifier=http://pivot.mg/fhir/identifiant-sanitaire|PIVOT-IFA-2026-00142

Recherche par identifiant sanitaire

Patients d’un fokontany

GET

/Patient?fokontany=Tsaratanana

Patients d’un fokontany donné

Patients d’un ASC

GET

/Patient?agent-communautaire=Practitioner/asc-017

Patients suivis par un ASC

Consultations d’un patient

GET

/Encounter?patient=Patient/pivot-002

Visites d’un patient

Observations d’une consultation

GET

/Observation?encounter=Encounter/enc-001

Mesures cliniques d’une consultation

Diagnostics paludisme

GET

/Condition?code=http://hl7.org/fhir/sid/icd-10|B50

Conditions diagnostiquées paludisme

Prescriptions ACT

GET

/MedicationRequest?medication=ACT

Prescriptions d’ACT

2.8 Paramètres de recherche

Paramètres existants — 4 piliers cliniques :

Paramètres de recherche — Piliers cliniques

Ressource

Paramètre

Type

Expression

Patient

fokontany

String

Patient.extension.where(url='...pivot-fokontany').value

Patient

agent-communautaire

Reference

Patient.extension.where(url='...pivot-agent-communautaire').value

Patient

district

String

Patient.address.district

Patient

commune

String

Patient.address.city

Encounter

type-visite

Token

Encounter.class

Condition

diagnostic-icd10

Token

Condition.code.coding.where(system='...icd-10')

MedicationRequest

medicament-pivot

Token

MedicationRequest.medication...where(system='...pivot-medicaments')

Nouveaux paramètres de recherche SBEc :

Paramètres de recherche — SBEc

Ressource

Paramètre

Type

Description

Observation (Signal)

signal-type

Token

Recherche par type de signal (SIGNAL_IMMEDIAT, etc.)

Observation (Signal)

signal-location

Reference

Recherche par lieu de survenue

Observation (Signal)

signal-date-survenue

Date

Recherche par date de survenue

RiskAssessment

risk-level

Token

Recherche par niveau de risque

RiskAssessment

evaluation-date

Date

Recherche par date d’évaluation

Communication

alert-priority

Token

Recherche par priorité d’alerte

Communication

alert-sender

Reference

Recherche par expéditeur

Location

location-type

Token

Recherche par type (district, commune, csb, fokontany)

Location

location-parent

Reference

Recherche par lieu parent (partOf)


3. Format

3.1 Formats de données FHIR

Types de contenu (Content-Type) :

Le serveur FHIR PIVOT supporte deux formats de représentation des ressources :

Formats de données supportés

Format

Content-Type

Paramètre _format

Usage

JSON

application/fhir+json

_format=json

Format principal (recommandé)

XML

application/fhir+xml

_format=xml

Format alternatif

En-têtes HTTP requis :

En-têtes HTTP

En-tête

Valeur

Description

Content-Type

application/fhir+json; charset=utf-8

Format du corps de requête (POST/PUT)

Accept

application/fhir+json

Format de réponse souhaité

Authorization

Bearer {token}

Token OAuth2 (en production)

If-Match

W/"{versionId}"

Contrôle de concurrence (PUT conditionnel)

3.2 Format Bundle — lot de ressources

Le Bundle FHIR permet d’envoyer ou recevoir plusieurs ressources en une seule requête.

Types de Bundle utilisés dans SBEc

Type Bundle

Usage SBEc

Méthode HTTP

Atomique

transaction

Créer plusieurs ressources liées en une opération atomique

POST /

✅ Oui

batch

Envoyer plusieurs opérations indépendantes

POST /

❌ Non

searchset

Résultat d’une recherche (retourné par le serveur)

GET (réponse)

collection

Export de données, rapport

N/A

Exemple de Bundle transaction :

Bundle transaction — Signal + Group
{
  "resourceType": "Bundle",
  "type": "transaction",
  "entry": [
    {
      "fullUrl": "urn:uuid:signal-001",
      "resource": {
        "resourceType": "Observation",
        "id": "signal-palu-001",
        "status": "final",
        "category": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-observation-category",
          "code": "signal-epidemiologique"}]}],
        "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10", "code": "B54"}]}
      },
      "request": {"method": "PUT", "url": "Observation/signal-palu-001"}
    },
    {
      "fullUrl": "urn:uuid:group-001",
      "resource": {
        "resourceType": "Group",
        "id": "cas-palu-001",
        "type": "person",
        "actual": true
      },
      "request": {"method": "PUT", "url": "Group/cas-palu-001"}
    }
  ]
}

3.3 Format searchset — réponse de recherche

Exemple de réponse paginée à une recherche :

Bundle searchset — réponse paginée
{
  "resourceType": "Bundle",
  "type": "searchset",
  "total": 42,
  "link": [
    {"relation": "self",
     "url": "http://[serveur]/fhir/Observation?category=signal-epidemiologique&_count=10"},
    {"relation": "next",
     "url": "http://[serveur]/fhir/Observation?category=signal-epidemiologique&_count=10&_offset=10"}
  ],
  "entry": [
    {
      "fullUrl": "http://[serveur]/fhir/Observation/signal-palu-001",
      "resource": {"resourceType": "Observation", "id": "signal-palu-001"},
      "search": {"mode": "match"}
    }
  ]
}

3.4 Format OperationOutcome — erreurs et avertissements

Lorsqu’une requête échoue ou génère un avertissement, le serveur retourne une ressource OperationOutcome :

Codes de réponse HTTP

Code HTTP

Signification

Quand

200 OK

Succès (lecture, recherche)

GET réussi

201 Created

Ressource créée

POST réussi

400 Bad Request

Requête mal formée

JSON invalide, champ obligatoire manquant

401 Unauthorized

Non authentifié

Token manquant ou expiré

404 Not Found

Ressource inexistante

ID inconnu

409 Conflict

Conflit de version

Mise à jour concurrente

422 Unprocessable

Validation échouée

Non conforme au profil FHIR

Exemple d’OperationOutcome (erreur 422) :

OperationOutcome — erreur de validation
{
  "resourceType": "OperationOutcome",
  "issue": [
    {
      "severity": "error",
      "code": "required",
      "details": {
        "text": "Observation.category est obligatoire pour un signal epidemiologique"
      },
      "diagnostics": "Le champ 'category' avec le code 'signal-epidemiologique' est requis par le profil PivotObservationSignal",
      "expression": ["Observation.category"]
    }
  ]
}

3.5 Format de pagination

Paramètres de pagination

Paramètre

Description

Valeur par défaut

Exemple

_count

Nombre de résultats par page

20

?_count=50

_offset

Position de départ

0

?_offset=20

_sort

Tri des résultats

non trié

?_sort=-date (décroissant)

_total

Inclure le total

accurate

?_total=none (désactiver le comptage)

_include

Inclure les ressources référencées

aucune

?_include=Observation:subject


4. Profils

4.1 Profil PivotLocation

La ressource Location modélise la hiérarchie administrative de Madagascar : District → Commune → CSB → Fokontany.

Profil PivotLocation — Champs

Champ FHIR

Card.

Type

Description

Exemple

Location.identifier

1..*

Identifier

Identifiant unique du lieu

LOC-IFA-001

Location.status

1..1

Code

Statut du lieu (active | inactive)

active

Location.name

1..1

String

Nom du lieu

District Ifanadiana

Location.mode

1..1

Code

instance | kind

instance

Location.type

1..1

CodeableConcept

Type de lieu (district, commune, csb, fokontany)

district

Location.address

0..1

Address

Adresse (district, city)

{"district":"Ifanadiana"}

Location.address.district

1..1

String

District sanitaire

Ifanadiana

Location.address.city

0..1

String

Commune

Kelilalina

Location.physicalType

0..1

CodeableConcept

Type physique du lieu

bu (Building) / area

Location.partOf

0..1

Reference(Location)

Lieu parent dans la hiérarchie

Location/district-ifanadiana

Location.managingOrganization

0..1

Reference(Organization)

Organisation gestionnaire

Organization/csb-kelilalina

Hiérarchie géographique via partOf :

Niveaux hiérarchiques — Location

Niveau

Location.type

partOf

Exemple

District

district

(aucun — niveau racine)

District Ifanadiana

Commune

commune

Reference → Location (District)

Commune Kelilalina → District Ifanadiana

CSB

csb

Reference → Location (Commune)

CSB II Kelilalina → Commune Kelilalina

Fokontany

fokontany

Reference → Location (Commune)

Fokontany Tsaratanana → Commune Kelilalina

Exemple JSON — Hiérarchie complète :

District Ifanadiana
{
  "resourceType": "Location",
  "id": "district-ifanadiana",
  "identifier": [{"system": "http://[serveur]/fhir/location", "value": "LOC-DIST-IFA"}],
  "status": "active",
  "name": "District Ifanadiana",
  "mode": "instance",
  "type": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-location-type",
    "code": "district", "display": "District sanitaire"}]}],
  "address": {"district": "Ifanadiana"}
}
Commune Kelilalina
{
  "resourceType": "Location",
  "id": "commune-kelilalina",
  "status": "active",
  "name": "Commune Kelilalina",
  "mode": "instance",
  "type": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-location-type",
    "code": "commune", "display": "Commune"}]}],
  "address": {"district": "Ifanadiana", "city": "Kelilalina"},
  "partOf": {"reference": "Location/district-ifanadiana", "display": "District Ifanadiana"}
}
CSB II Kelilalina
{
  "resourceType": "Location",
  "id": "csb2-kelilalina",
  "status": "active",
  "name": "CSB II Kelilalina",
  "mode": "instance",
  "type": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-location-type",
    "code": "csb", "display": "Centre de Santé de Base"}]}],
  "address": {"district": "Ifanadiana", "city": "Kelilalina"},
  "physicalType": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/location-physical-type",
    "code": "bu", "display": "Building"}]},
  "partOf": {"reference": "Location/commune-kelilalina", "display": "Commune Kelilalina"},
  "managingOrganization": {"reference": "Organization/csb-kelilalina"}
}
Fokontany Tsaratanana
{
  "resourceType": "Location",
  "id": "fokontany-tsaratanana",
  "status": "active",
  "name": "Fokontany Tsaratanana",
  "mode": "instance",
  "type": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-location-type",
    "code": "fokontany", "display": "Fokontany"}]}],
  "address": {"district": "Ifanadiana", "city": "Kelilalina"},
  "partOf": {"reference": "Location/commune-kelilalina", "display": "Commune Kelilalina"}
}

4.2 Profil PivotObservationSignal

La ressource Observation est réutilisée pour les signaux épidémiologiques du système SBEc. Chaque signal est une Observation avec la catégorie spéciale signal-epidemiologique.

Profil PivotObservationSignal — Champs

Champ FHIR

Card.

Type

Description SBEc

Mapping

Observation.status

1..1

code

Statut du signal

registered | preliminary | final

Observation.category

1..1

CodeableConcept

Catégorie = signal-epidemiologique

Code: signal-epidemiologique

Observation.code

1..1

CodeableConcept

Nature du signal (maladie/événement)

Ex: Paludisme, Rougeole, Diarrhée

Observation.subject

0..1

Reference(Location)

Lieu de survenue du signal

→ Location (Fokontany/Commune/CSB)

Observation.focus

0..*

Reference(Group)

Groupe de cas associé

→ Group (cas regroupés)

Observation.effectiveDateTime

1..1

dateTime

Date de détection du signal

Date détection

Observation.issued

0..1

instant

Date de notification/rapport

Date rapport

Observation.performer

0..*

Reference(Practitioner)

Qui a détecté le signal

ASC / Médecin CSB

component[0] (date_survenue)

1..1

component

Date de survenue effective

pivot-signal-date-survenue

component[1] (nb_cas)

1..1

component

Nombre de cas détectés

pivot-signal-nb-cas

component[2] (nb_deces)

0..1

component

Nombre de décès

pivot-signal-nb-deces

Extension: type-signal

1..1

Extension

Type de signal (3 types)

Voir ci-dessous

Extension — Type de signaux :

Extension pivot-type-signal

Propriété

Valeur

URL

http://[serveur]/StructureDefinition/pivot-type-signal

Contexte

Observation (catégorie signal-epidemiologique)

Type de valeur

CodeableConcept

Cardinalité

1..1 (obligatoire)

Binding

http://pivot.mg/fhir/ValueSet/pivot-type-signal (required)

Les 3 types de signaux :

Types de signaux épidémiologiques

Code

Display

Définition

SIGNAL_IMMEDIAT

Signal immédiat

Événement sanitaire nécessitant une alerte immédiate (épidémie confirmée, maladie à déclaration obligatoire, mortalité anormale)

SIGNAL_INHABITUEL

Signal inhabituel

Événement sanitaire inhabituel nécessitant une investigation (augmentation anormale de cas, apparition d’une pathologie rare, cluster géographique)

SIGNAL_TENDANCE

Signal de tendance

Tendance épidémiologique observée sur une période (augmentation progressive, saisonnalité anormale, dépassement de seuil)

Exemple JSON — Signal épidémiologique :

Observation — Signal paludisme (SIGNAL_IMMEDIAT)
{
  "resourceType": "Observation",
  "id": "signal-palu-001",
  "meta": {
    "profile": ["http://[serveur]/fhir/StructureDefinition/pivot-observation-signal"]
  },
  "extension": [{
    "url": "http://[serveur]/fhir/StructureDefinition/pivot-type-signal",
    "valueCodeableConcept": {
      "coding": [{
        "system": "http://[serveur]/fhir/CodeSystem/pivot-type-signal",
        "code": "SIGNAL_IMMEDIAT",
        "display": "Signal immédiat"
      }]
    }
  }],
  "status": "final",
  "category": [{"coding": [{
    "system": "http://[serveur]/fhir/CodeSystem/pivot-observation-category",
    "code": "signal-epidemiologique",
    "display": "Signal épidémiologique"
  }]}],
  "code": {"coding": [{
    "system": "http://hl7.org/fhir/sid/icd-10",
    "code": "B54",
    "display": "Paludisme, sans précision"
  }]},
  "subject": {"reference": "Location/fokontany-tsaratanana", "display": "Fokontany Tsaratanana"},
  "focus": [{"reference": "Group/cas-palu-tsaratanana-202605"}],
  "effectiveDateTime": "2026-05-28T08:00:00+03:00",
  "issued": "2026-05-28T10:00:00+03:00",
  "performer": [{"reference": "Practitioner/asc-017", "display": "Rasoa Vola (ASC)"}],
  "component": [
    {
      "code": {"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-signal-component",
        "code": "date-survenue", "display": "Date de survenue"}]},
      "valueDateTime": "2026-05-25"
    },
    {
      "code": {"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-signal-component",
        "code": "nombre-cas", "display": "Nombre de cas"}]},
      "valueInteger": 15
    },
    {
      "code": {"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-signal-component",
        "code": "nombre-deces", "display": "Nombre de décès"}]},
      "valueInteger": 2
    }
  ]
}

4.3 Profil PivotGroup

La ressource Group permet de regrouper les cas liés à un même signal épidémiologique ou une même zone géographique.

Profil PivotGroup — Champs

Champ FHIR

Card.

Type

Description

Exemple

Group.identifier

0..*

Identifier

Identifiant du groupe

GRP-PALU-IFA-202605

Group.active

1..1

boolean

Groupe actif ou non

true

Group.type

1..1

code

Type de groupe

person

Group.actual

1..1

boolean

Groupe réel (pas théorique)

true

Group.code

0..1

CodeableConcept

Nature du regroupement

Cas de paludisme

Group.name

0..1

string

Nom descriptif du groupe

Cas paludisme Tsaratanana Mai 2026

Group.quantity

0..1

unsignedInt

Nombre de membres

15

Group.managingEntity

0..1

Reference(Organization)

Organisation responsable

Organization/csb-kelilalina

Group.member

0..*

BackboneElement

Membres du groupe

Voir ci-dessous

Group.member.entity

1..1

Reference(Patient)

Patient membre

Patient/pivot-002

Group.member.period

0..1

Period

Période d’appartenance

2026-05-25 → (en cours)

Exemple JSON — Group :

Group — Cas paludisme Tsaratanana Mai 2026
{
  "resourceType": "Group",
  "id": "cas-palu-tsaratanana-202605",
  "identifier": [{"system": "http://[serveur]/fhir/group", "value": "GRP-PALU-IFA-202605-001"}],
  "active": true,
  "type": "person",
  "actual": true,
  "code": {"coding": [{"system": "http://hl7.org/fhir/sid/icd-10",
    "code": "B54", "display": "Paludisme, sans précision"}]},
  "name": "Cas paludisme Fokontany Tsaratanana - Mai 2026",
  "quantity": 15,
  "managingEntity": {"reference": "Organization/csb-kelilalina", "display": "CSB II Kelilalina"},
  "member": [
    {
      "entity": {"reference": "Patient/pivot-002", "display": "Rasoa Nirina"},
      "period": {"start": "2026-05-25"}
    },
    {
      "entity": {"reference": "Patient/pivot-001", "display": "Rakoto Hery"},
      "period": {"start": "2026-05-26"}
    }
  ]
}

4.4 Profil PivotRiskAssessment — SBEc_Evaluation

La ressource RiskAssessment modélise l”évaluation SBEc (Surveillance Basée sur les Événements communautaires). Elle permet d’évaluer le risque associé à un signal épidémiologique détecté.

Profil PivotRiskAssessment — Champs

Champ FHIR

Card.

Type

Description SBEc

Exemple

RiskAssessment.identifier

0..*

Identifier

Identifiant de l’évaluation

EVAL-SBEc-001

RiskAssessment.status

1..1

code

Statut de l’évaluation

final | preliminary | amended

RiskAssessment.method

0..1

CodeableConcept

Méthode d’évaluation

SBEc - Évaluation communautaire

RiskAssessment.subject

1..1

Reference(Group)

Groupe/population évalué

Group/cas-palu-tsaratanana

RiskAssessment.encounter

0..1

Reference(Encounter)

Consultation associée

Encounter/enc-eval-001

RiskAssessment.occurrenceDateTime

1..1

dateTime

Date de l’évaluation

2026-05-29

RiskAssessment.condition

0..1

Reference(Condition)

Condition évaluée

Condition (paludisme)

RiskAssessment.performer

0..1

Reference(Practitioner)

Évaluateur

Médecin district

RiskAssessment.basis

0..*

Reference(Observation)

Signal(aux) de base

Observation/signal-palu-001

prediction.outcome

0..1

CodeableConcept

Résultat prévu

Épidémie confirmée

prediction.probabilityDecimal

0..1

decimal

Probabilité (0-1)

0.85

prediction.qualitativeRisk

0..1

CodeableConcept

Niveau de risque

high | moderate | low

prediction.rationale

0..1

string

Justification

Augmentation rapide des cas…

RiskAssessment.mitigation

0..1

string

Actions d’atténuation recommandées

Distribution ACT + pulvérisation

RiskAssessment.note

0..*

Annotation

Notes complémentaires

Recommandation d’investigation

Exemple JSON — SBEc_Evaluation :

RiskAssessment — Évaluation SBEc paludisme
{
  "resourceType": "RiskAssessment",
  "id": "sbec-eval-001",
  "identifier": [{"system": "http://[serveur]/fhir/evaluation",
    "value": "EVAL-SBEc-IFA-202605-001"}],
  "status": "final",
  "method": {"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-evaluation-method",
    "code": "SBEc", "display": "Surveillance Basée sur les Événements communautaires"}]},
  "subject": {
    "reference": "Group/cas-palu-tsaratanana-202605",
    "display": "Cas paludisme Tsaratanana Mai 2026"
  },
  "occurrenceDateTime": "2026-05-29T14:00:00+03:00",
  "performer": {
    "reference": "Practitioner/med-district-001",
    "display": "Dr Andriamanalina (Médecin district)"
  },
  "basis": [{"reference": "Observation/signal-palu-001", "display": "Signal paludisme Tsaratanana"}],
  "prediction": [{
    "outcome": {"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-risk-outcome",
      "code": "EPIDEMIE_CONFIRMEE", "display": "Épidémie confirmée"}]},
    "probabilityDecimal": 0.85,
    "qualitativeRisk": {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/risk-probability",
      "code": "high", "display": "High likelihood"}]},
    "rationale": "15 cas en 3 jours dans un fokontany de 200 habitants. Taux d'attaque > 5%. TDR positif chez 90% des cas testés."
  }],
  "mitigation": "1) Distribution immédiate d'ACT. 2) Pulvérisation intra-domiciliaire. 3) Distribution de moustiquaires. 4) Renforcement du dépistage actif par les ASC.",
  "note": [{"text": "Investigation de terrain recommandée sous 24h. Notification au niveau régional."}]
}

4.5 Profil PivotSubstance

La ressource Substance identifie les agents pathogènes, toxines ou substances impliquées dans un événement sanitaire.

Profil PivotSubstance — Champs

Champ FHIR

Card.

Type

Description

Exemple

Substance.identifier

0..*

Identifier

Identifiant de la substance

SUB-PFAL-001

Substance.status

0..1

code

active | inactive | entered-in-error

active

Substance.category

0..*

CodeableConcept

Catégorie de substance

biological (agent biologique)

Substance.code

1..1

CodeableConcept

Code de la substance

Plasmodium falciparum

Substance.description

0..1

string

Description

Parasite responsable du paludisme grave

Substance.instance

0..*

BackboneElement

Instance spécifique

(si échantillon)

Substance.ingredient

0..*

BackboneElement

Composants

(si substance composée)

Exemple JSON — Substance :

Substance — Plasmodium falciparum
{
  "resourceType": "Substance",
  "id": "pathogene-pfalciparum",
  "identifier": [{"system": "http://[serveur]/fhir/substance", "value": "SUB-PFAL-001"}],
  "status": "active",
  "category": [{"coding": [{"system": "http://terminology.hl7.org/CodeSystem/substance-category",
    "code": "biological", "display": "Biological Substance"}]}],
  "code": {
    "coding": [{"system": "http://snomed.info/sct",
      "code": "30020004", "display": "Plasmodium falciparum"}],
    "text": "Plasmodium falciparum - agent du paludisme grave"
  },
  "description": "Parasite protozoaire responsable de la forme la plus grave du paludisme. Principal agent identifié dans le district d'Ifanadiana."
}

4.6 Profil PivotCommunication

La ressource Communication modélise les alertes, notifications et échanges d’information entre les différents niveaux du système de santé suite à la détection d’un signal épidémiologique.

Profil PivotCommunication — Champs

Champ FHIR

Card.

Type

Description

Communication.identifier

0..*

Identifier

Identifiant de la communication

Communication.status

1..1

code

completed | in-progress | preparation

Communication.category

0..*

CodeableConcept

alert (alerte sanitaire)

Communication.priority

0..1

code

routine | urgent | asap | stat

Communication.subject

0..1

Reference(Group)

Sujet — groupe de cas

Communication.about

0..*

Reference(Observation)

Signal(aux) concerné(s)

Communication.sent

0..1

dateTime

Date d’envoi

Communication.received

0..1

dateTime

Date de réception

Communication.sender

0..1

Reference(Practitioner|Organization)

Expéditeur

Communication.recipient

0..*

Reference(Practitioner|Organization)

Destinataire(s)

Communication.payload.contentString

0..1

string

Texte du message

Communication.payload.contentReference

0..1

Reference

Référence à l’évaluation (RiskAssessment)

Communication.reasonReference

0..*

Reference(Observation)

Signal déclencheur

Exemple JSON — Communication (Alerte) :

Communication — Alerte paludisme urgente
{
  "resourceType": "Communication",
  "id": "alert-palu-001",
  "identifier": [{"system": "http://[serveur]/fhir/communication",
    "value": "COM-ALERT-IFA-202605-001"}],
  "status": "completed",
  "category": [{"coding": [{"system": "http://[serveur]/fhir/CodeSystem/pivot-communication-category",
    "code": "alert", "display": "Alerte sanitaire"}]}],
  "priority": "urgent",
  "subject": {"reference": "Group/cas-palu-tsaratanana-202605",
    "display": "Cas paludisme Tsaratanana Mai 2026"},
  "about": [{"reference": "Observation/signal-palu-001", "display": "Signal paludisme Tsaratanana"}],
  "sent": "2026-05-29T15:00:00+03:00",
  "received": "2026-05-29T15:05:00+03:00",
  "sender": {
    "reference": "Practitioner/med-district-001",
    "display": "Dr Andriamanalina (Médecin district Ifanadiana)"
  },
  "recipient": [{"reference": "Organization/drsp-vatovavy",
    "display": "DRSP Vatovavy-Fitovinany (Direction Régionale)"}],
  "payload": [
    {
      "contentString": "ALERTE - Paludisme\n\nDistrict: Ifanadiana\nFokontany: Tsaratanana\nNombre de cas: 15\nNombre de décès: 2\nDate de survenue: 25/05/2026\nDate de détection: 28/05/2026\n\nÉvaluation SBEc: Risque ÉLEVÉ (probabilité 85%)\nActions en cours: Distribution ACT, pulvérisation, dépistage actif.\n\nInvestigation de terrain recommandée sous 24h."
    },
    {
      "contentReference": {
        "reference": "RiskAssessment/sbec-eval-001",
        "display": "Évaluation SBEc - Paludisme Tsaratanana"
      }
    }
  ],
  "reasonReference": [{"reference": "Observation/signal-palu-001"}]
}

4.7 Profils cliniques existants — 4 Piliers

Ces ressources constituent le socle clinique du système PIVOT, déjà défini dans les profils FHIR existants (profils-fhir-pivot.json).

Patient — PivotPatient

Profil : http://[serveur]/fhir/StructureDefinition/pivot-patient

Champ

Card.

Type

Description

identifier (identifiantSanitaire)

1..1

Identifier

Identifiant sanitaire PIVOT (system: http://[serveur]/fhir/identifiant-sanitaire)

name.family

1..1

string

Nom de famille

name.given

1..*

string

Prénom(s)

gender

1..1

code

Sexe (male | female)

birthDate

1..1

date

Date de naissance

telecom

0..*

ContactPoint

Téléphone (si disponible)

address.district

1..1

string

District sanitaire

address.city

1..1

string

Commune

extension:fokontany

0..1

Extension(string)

Fokontany du patient

extension:agentCommunautaire

0..1

Extension(Reference)

ASC référent

Encounter — PivotEncounter

Profil : http://[serveur]/fhir/StructureDefinition/pivot-encounter

Champ

Card.

Type

Description

status

1..1

code

planned | arrived | in-progress | finished | cancelled

class

1..1

Coding

Type de visite (AMB, HH, FLD, IMP, EMER, REF)

subject

1..1

Reference(Patient)

Patient concerné

participant

1..*

BackboneElement

Praticien ou ASC responsable

period.start

1..1

dateTime

Début de consultation

serviceProvider

1..1

Reference(Organization)

Structure de santé (CSB, hôpital)

location

1..*

BackboneElement

Lieu physique

Observation clinique — PivotObservation

Profil : http://[serveur]/fhir/StructureDefinition/pivot-observation

Champ

Card.

Type

Description

status

1..1

code

final | amended | cancelled

category

1..1

CodeableConcept

vital-signs, laboratory, etc.

code

1..1

CodeableConcept

Code LOINC (poids, température, TDR, MUAC…)

subject

1..1

Reference(Patient)

Patient mesuré

encounter

0..1

Reference(Encounter)

Consultation associée

effectiveDateTime

1..1

dateTime

Date/heure de la mesure

performer

0..*

Reference(Practitioner)

Praticien/ASC

value[x]

0..1

Quantity|string|CodeableConcept

Résultat de la mesure

Condition — PivotCondition

Profil : http://[serveur]/fhir/StructureDefinition/pivot-condition

Champ

Card.

Type

Description

clinicalStatus

1..1

CodeableConcept

active | recurrence | inactive | resolved

verificationStatus

1..1

CodeableConcept

confirmed | provisional | refuted

category

1..1

CodeableConcept

encounter-diagnosis | problem-list-item

code

1..1

CodeableConcept

Code ICD-10 du diagnostic

subject

1..1

Reference(Patient)

Patient diagnostiqué

encounter

1..1

Reference(Encounter)

Consultation du diagnostic

onsetDateTime

0..1

dateTime

Date d’apparition des symptômes

recordedDate

1..1

date

Date d’enregistrement

MedicationRequest — PivotMedicationRequest

Profil : http://[serveur]/fhir/StructureDefinition/pivot-medication-request

Champ

Card.

Type

Description

status

1..1

code

active | completed | cancelled

intent

1..1

code

order (fixé)

medicationCodeableConcept

1..1

CodeableConcept

Médicament (ACT, Amoxicilline, SRO…)

subject

1..1

Reference(Patient)

Patient

encounter

1..1

Reference(Encounter)

Consultation

authoredOn

1..1

dateTime

Date de prescription

requester

1..1

Reference(Practitioner)

Prescripteur

reasonReference

0..*

Reference(Condition)

Diagnostic justifiant

dosageInstruction.text

1..1

string

Posologie en texte libre

4.8 Extensions PIVOT

Extensions FHIR personnalisées PIVOT

Extension

URL

Contexte

Type valeur

Description

Fokontany

http://[serveur]/fhir/StructureDefinition/pivot-fokontany

Patient

string

Plus petite division administrative de Madagascar

Agent Communautaire

http://[serveur]/fhir/StructureDefinition/pivot-agent-communautaire

Patient

Reference(Practitioner)

ASC référent du patient

Type Signal

http://[serveur]/fhir/StructureDefinition/pivot-type-signal

Observation (signal)

CodeableConcept

Type : SIGNAL_IMMEDIAT, SIGNAL_INHABITUEL, SIGNAL_TENDANCE

4.9 Terminologies et ValueSets

ValueSets existants — 4 piliers cliniques :

ValueSet

URL

Contenu

Observations PIVOT

http://[serveur]/fhir/ValueSet/pivot-observations-codes

Codes LOINC : poids, taille, température, MUAC, TDR, FC, FR, PA, PC, symptômes

Diagnostics PIVOT

http://[serveur]/fhir/ValueSet/pivot-diagnostics-codes

Codes ICD-10 : paludisme, malnutrition, IRA, pneumonie, diarrhée, anémie, dermatite, infection urinaire, grossesse

Types de visites

http://[serveur]/fhir/ValueSet/pivot-type-visite

AMB, IMP, HH, FLD, EMER, REF

Médicaments PIVOT

http://[serveur]/fhir/ValueSet/pivot-medicaments

ACT, AMOX, PARA, SRO, ZINC, FERFS, VITA, ALBZ, COTRI, METRO, RUTF

Nouveaux ValueSets SBEc :

ValueSet

URL

Contenu

Type de signal

http://[serveur]/fhir/ValueSet/pivot-type-signal

SIGNAL_IMMEDIAT, SIGNAL_INHABITUEL, SIGNAL_TENDANCE

Type de lieu

http://[serveur]/fhir/ValueSet/pivot-location-type

district, commune, csb, fokontany

Catégorie communication

http://[serveur]/fhir/ValueSet/pivot-communication-category

alert, notification, report, request

Méthode évaluation

http://[serveur]/fhir/ValueSet/pivot-evaluation-method

SBEc (Surveillance Basée sur les Événements communautaires)

Issue évaluation (outcome)

http://[serveur]/fhir/ValueSet/pivot-risk-outcome

EPIDEMIE_CONFIRMEE, EPIDEMIE_SUSPECTEE, FAUSSE_ALERTE, EN_INVESTIGATION

Composants signal

http://[serveur]/fhir/ValueSet/pivot-signal-component

date-survenue, nombre-cas, nombre-deces

CodeSystem — Type de signal (détail) :

CodeSystem pivot-type-signal
{
  "resourceType": "CodeSystem",
  "id": "pivot-type-signal",
  "url": "http://[serveur]/fhir/CodeSystem/pivot-type-signal",
  "version": "1.0.0",
  "name": "PivotTypeSignal",
  "title": "Types de signaux épidémiologiques PIVOT",
  "status": "draft",
  "content": "complete",
  "concept": [
    {"code": "SIGNAL_IMMEDIAT",   "display": "Signal immédiat",
     "definition": "Événement sanitaire nécessitant une alerte immédiate"},
    {"code": "SIGNAL_INHABITUEL", "display": "Signal inhabituel",
     "definition": "Événement sanitaire inhabituel nécessitant une investigation"},
    {"code": "SIGNAL_TENDANCE",   "display": "Signal de tendance",
     "definition": "Tendance épidémiologique observée sur une période"}
  ]
}

4.10 Exemples JSON — Scénario complet SBEc

Note

Scénario : Détection d’une flambée de paludisme au Fokontany Tsaratanana. L’ASC détecte 15 cas en 3 jours, dont 2 décès. Le signal est créé, les cas regroupés, une évaluation SBEc est réalisée, et une alerte est envoyée au niveau régional.

Ordre de création des ressources :

Ordre de création — Scénario SBEc complet

Étape

Ressource

Action

1

Location

Hiérarchie déjà en place : District → Commune → Fokontany

2

Patient

Enregistrement des patients concernés

3

Group

Regroupement des cas de paludisme du fokontany

4

Substance

Identification de l’agent (Plasmodium falciparum)

5

Observation (Signal)

Création du signal épidémiologique SIGNAL_IMMEDIAT

6

RiskAssessment

Évaluation SBEc — risque élevé (probabilité 85%)

7

Communication

Alerte urgente envoyée à la DRSP Vatovavy-Fitovinany