PackagesCanonicalsLogsProblems
    Packages
    ca.qc.sq.sgrdv@1.0.6
    http://sante.quebec/fhir/CapabilityStatement/sgrdv-source
{
  "description": "Capacités FHIR R4 du système source (DMÉ/SIP-C) en tant que serveur vis-à-vis de SGRDV. Décrit les opérations de recherche de disponibilités ($find), d'agrégation ($aggregate), de réservation ($book), de réception des notifications de cycle de vie d'un verrou via le canal FHIR Messaging $process-message, et la recherche des cliniques desservies via GET [base]/Organization, acceptées en provenance de SGRDV.",
  "_filename": "CapabilityStatement-SGRDVCapabilityStatementSource.json",
  "package_name": "ca.qc.sq.sgrdv",
  "format": [ "json", "xml" ],
  "date": "2026-04-20",
  "publisher": "Santé Québec",
  "fhirVersion": "4.0.1",
  "name": "SGRDVCapabilityStatementSource",
  "type": null,
  "experimental": "true",
  "resourceType": "CapabilityStatement",
  "title": "SGRDV — CapabilityStatement Surface Systèmes source",
  "package_version": "1.0.6",
  "status": "active",
  "messaging": [ {
    "documentation": "Le système source accepte les notifications de cycle de vie d'un verrou via FHIR Messaging R4 ($process-message). Trois événements supportés : lock-create, lock-extend, lock-release (cf. CodeSystem SGRDVLockEventsCS, façade SGRDVSourceNotificationEventsVS).",
    "supportedMessage": [ {
      "mode": "receiver",
      "definition": "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-lock-notification-message-header"
    } ]
  } ],
  "id": "bd0df3f9-ba65-42b2-9d21-c35dc9ee7c2e",
  "kind": "requirements",
  "url": "http://sante.quebec/fhir/CapabilityStatement/sgrdv-source",
  "version": "1.0.6",
  "rest": [ {
    "mode": "server",
    "resource": [ {
      "type": "Appointment",
      "operation": [ {
        "name": "find",
        "definition": "http://sante.quebec/fhir/OperationDefinition/sgrdv-source-appointment-find",
        "documentation": "Recherche des disponibilités de rendez-vous auprès du DMÉ. SGRDV relaye la demande du portail en ajoutant RTS/RLS si nécessaire."
      }, {
        "name": "aggregate",
        "definition": "http://sante.quebec/fhir/OperationDefinition/sgrdv-source-appointment-aggregate",
        "documentation": "Agrège les disponibilités de rendez-vous auprès du DMÉ. Retourne un Parameters avec comptage groupé."
      }, {
        "name": "book",
        "definition": "http://sante.quebec/fhir/OperationDefinition/sgrdv-source-appointment-book",
        "documentation": "Réserve un rendez-vous sur une disponibilité préalablement verrouillée. SGRDV relaye la demande du portail sans le lockIdentifier (secret porteur du portail, jamais transmis au DMÉ) en conservant l'orientation-id pour la traçabilité Vitrai. Contrat actuellement en draft. En sortie : Bundle collection contenant un Parameters qui expose la disponibilité réservée en logical reference (Reference.identifier seul) en cas de succès — l'Appointment et les ressources associées ne sont pas rématérialisés (information déjà connue de SGRDV / du portail via $find) ; OperationOutcome seul en cas de refus."
      } ],
      "interaction": [ {
        "code": "read"
      } ],
      "documentation": "Fourniture de disponibilités de rendez-vous à SGRDV via $find et $aggregate, et réservation d'un rendez-vous via $book. Les notifications de cycle de vie d'un verrou ne sont plus rattachées à la ressource Appointment depuis la migration vers FHIR Messaging — elles transitent par l'opération système $process-message.",
      "supportedProfile": [ "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-find-request-parameters", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-find-response-bundle", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-aggregate-request-parameters", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-aggregate-response-parameters", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-book-notification-parameters", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-book-response-bundle" ]
    }, {
      "type": "MessageHeader",
      "documentation": "MessageHeader des notifications de cycle de vie d'un verrou (canal $process-message).",
      "supportedProfile": [ "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-lock-notification-message-header" ]
    }, {
      "type": "Bundle",
      "documentation": "Bundle de type message porté en entrée de $process-message pour les notifications de verrou.",
      "supportedProfile": [ "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-lock-notification-bundle" ]
    }, {
      "type": "Organization",
      "interaction": [ {
        "code": "search-type",
        "documentation": "Recherche FHIR type-level de la liste des cliniques desservies par le DMÉ.\n\n**Verbe HTTP requis : `GET`.** L'URL est invoquée sans query string : `GET [base]/Organization`. Aucun paramètre de recherche n'est défini par le contrat.\n\n**Variante POST `/Organization/_search` (optionnelle, non requise)** — Le DMÉ peut, s'il le souhaite, supporter en plus la variante FHIR équivalente `POST [base]/Organization/_search` (corps `application/x-www-form-urlencoded`, vide ici puisqu'aucun paramètre n'est défini). Cette variante n'est ni requise ni imposée par le contrat SGRDV : SGRDV invoque exclusivement `GET`. Un DMÉ qui ne supporte que `GET` est conforme.\n\n**Filtrage côté serveur (responsabilité DMÉ)** — Le DMÉ doit retourner :\n- uniquement les cliniques **présentement** desservies par le DMÉ (l'inscription d'une clinique au DMÉ peut être ajoutée ou retirée au fil du temps) ;\n- uniquement les **cliniques de 1ère ligne offrant des services couverts par la RAMQ** susceptibles d'être impliquées dans le processus de prise de rendez-vous via les portails VotreSanté et REO ;\n- les **cliniques dont les services ne sont pas couverts par la RAMQ** sont **exclues**.\n\nAucun de ces critères n'est exposé en paramètre de recherche — ce sont des règles métier portées intégralement par le DMÉ.\n\n**Réponse en cas de succès** — HTTP 200 + `Bundle` `searchset` conforme au profil `SGRDVSourceListClinicsResponseBundle` :\n- `Bundle.type = #searchset` ;\n- `Bundle.total` (1..1) = nombre de cliniques retournées ;\n- `entry[organization]` (1..*) — une entry par clinique, conforme au profil `SGRDVBaseListClinicsOrganization` ; `search.mode = #match` recommandé ;\n- `entry[outcome]` (0..1) — `OperationOutcome` informationnel facultatif (par exemple horodatage de la liste retournée, contexte de fraîcheur) conforme au profil `SGRDVBaseOperationOutcome` ; `search.mode = #outcome` recommandé.\n\n**Réponse en cas d'erreur** — HTTP 4xx/5xx + `OperationOutcome` (profil `SGRDVBaseOperationOutcome`).\n\n**Identifiant des cliniques (`Organization.identifier`, 1..1)** — porte le **CodeEtablissement RAMQ** tel que retourné par GRL : `identifier.system` = NamingSystem RAMQ (`http://sante.quebec/fhir/NamingSystem/RAMQ`), `identifier.type.coding.code = #CodeEtablissement`, `identifier.value` = code d'établissement.\n\n**Nom de la clinique (`Organization.name`, 0..1)** — optionnel. Utilisé uniquement pour faciliter la lecture des données de référence par les équipes d'exploitation SGRDV. Aucun traitement métier n'en dépend.\n\n**Indicateur `indRvPublies` (`Organization.extension[indRvPublies].valueBoolean`, 0..1)** — sémantique précise :\n- **Absent** : SGRDV applique la valeur par défaut **TRUE** dans sa table de référence locale — la clinique est considérée comme susceptible de publier des disponibilités et le DMÉ sera interrogé lors des recherches de disponibilités la concernant.\n- **`true`** : équivalent fonctionnel à l'absence — la clinique publie des disponibilités.\n- **`false`** : le DMÉ signale que la clinique **ne publiera jamais** de disponibilités aux portails. SGRDV n'interrogera plus le DMÉ pour les disponibilités de cette clinique.\n\n**Fréquence d'invocation** — SGRDV appelle ce service à fréquence régulière (typiquement une fois par jour, la nuit) afin de tenir à jour son référentiel local des cliniques desservies par chaque DMÉ. Le DMÉ doit donc être en mesure de répondre en lecture seule à intervalle prévisible ; la liste retournée doit refléter l'état présent au moment de la requête.\n\n**X-Correlation-Id** — header HTTP requis sur cet appel comme sur tous les appels `api-source` (cf. documentation REST du `CapabilityStatement` ci-dessus). Le DMÉ journalise et retourne le même identifiant en écho dans la réponse HTTP."
      } ],
      "documentation": "Fourniture à SGRDV de la liste des cliniques de 1ère ligne offrant des services couverts par la RAMQ, présentement desservies par le DMÉ, susceptibles d'être impliquées dans le processus de prise de rendez-vous via les portails VotreSanté et REO. Filtrage côté serveur — cliniques dont les services ne sont pas couverts par la RAMQ exclues. Contrat actuellement en draft. Détails du contrat (verbe HTTP, filtrage, structure de réponse, sémantique des champs) dans la documentation de l'interaction search-type ci-dessous.",
      "supportedProfile": [ "http://sante.quebec/fhir/StructureDefinition/sgrdv-base-list-clinics-organization", "http://sante.quebec/fhir/StructureDefinition/sgrdv-source-list-clinics-response-bundle" ]
    } ],
    "operation": [ {
      "name": "process-message",
      "definition": "http://sante.quebec/fhir/OperationDefinition/sgrdv-source-process-message",
      "documentation": "Réception des notifications de cycle de vie d'un verrou émises par SGRDV vers le système source (lock-create, lock-extend, lock-release). Discrimination par MessageHeader.eventCoding. En entrée : Bundle de type message conforme au profil SGRDVSourceLockNotificationBundle. En sortie : HTTP 204 sans corps en cas de succès ; HTTP 4xx/5xx + OperationOutcome en cas d'erreur."
    } ],
    "documentation": "Le système source (DMÉ/SIP-C) agit comme serveur FHIR R4 vis-à-vis de SGRDV. SGRDV interroge le DMÉ pour obtenir des disponibilités via POST Appointment/$find et des comptages agrégés via POST Appointment/$aggregate, réserve un rendez-vous via POST Appointment/$book, lui envoie les notifications de cycle de vie d'un verrou (création, extension, libération) via le canal FHIR Messaging unique POST [base]/$process-message — l'événement étant discriminé par MessageHeader.eventCoding (lock-create, lock-extend, lock-release) — et obtient la liste des cliniques de 1ère ligne offrant des services couverts par la RAMQ et desservies par le DMÉ via GET [base]/Organization (filtrage côté serveur — cliniques dont les services ne sont pas couverts par la RAMQ exclues). Le contrat GET /Organization est actuellement en `status = draft` et susceptible d'évoluer avant stabilisation.\n\n**HTTP header X-Correlation-Id** — Tous les appels (toutes opérations confondues) doivent inclure le header `X-Correlation-Id` portant l'identifiant de corrélation propagé par SGRDV depuis la transaction d'origine côté portail. Le système source retourne ce même identifiant en écho dans la réponse HTTP et le journalise. Ce mécanisme est strictement HTTP — il n'est pas dupliqué dans le payload FHIR. Pour les messages FHIR, MessageHeader.id porte un identifiant FHIR-natif distinct du message particulier."
  } ]
}