Skip to main content

Enregistrer les audiences adjacentes au PHI

Le registre d’audiences adjacentes au PHI est la liste de votre organisation des listes de contacts et segments dont les membres portent du PHI — par exemple, des patients optés à la diffusion de traitement. La référence contrôles HIPAA documente les deux endpoints ; ce guide vous mène pour les exécuter en production : quoi désigner, comment fonctionnent les sémantiques d’écriture, ce qui se passe au lancement de campagne et comment lire l’audit trail. Le registre est propriété du tenant. Devotel ne désigne jamais d’audiences en votre nom et ne scope jamais le PHI pour vous — les désignations sont votre attestation, ce sont des contrôles bloqués par BAA que vous opérez, et ils ne prennent effet qu’une fois que HIPAA est dans le périmètre de votre organisation. Si vous n’avez pas encore exécuté le BAA et activé le mode HIPAA, exécutez d’abord la séquence Onboarding HIPAA.

1. Quand marquer une audience comme adjacente au PHI

La désignation suit la provenance : marquez les audiences dont les données sources contiennent du PHI, indépendamment de ce qu’une campagne individuelle envoie. Une audience est adjacente au PHI du fait de là où viennent ses membres — une importation de rappels de rendez-vous de patients, une liste opt-in de diffusion de traitement — pas du fait du copy que vous écrivez cette semaine. C’est pourquoi la désignation vit sur l’audience elle-même et pas sur une campagne : quelle que soit la campagne qui la prend, la désignation voyage avec. Marquez une audience comme adjacente au PHI quand :
  • Ses membres ont été importés d’un système qui retient du PHI (une exportation EHR, une synchronisation opt-in de portail patient).
  • La liste ou le segment est filtré ou assemblé sur des critères porteurs de PHI (tags adjacents au diagnostic, cohortes de traitement).
  • La carte de données de votre officier de compliance enregistre l’audience comme PHI dans le périmètre.
Ne désignez pas une audience « au cas où ». Une désignation attache le gate de lancement BAA à chaque campagne qui utilise l’audience — désigner des audiences qui ne portent pas de PHI bloque des lancements pour aucune raison de compliance. Qui peut attester : les deux endpoints requièrent le rôle owner ou admin — le même gate que les endpoints BAA. Un developer ou viewer reçoit 403. Gardez la décision de désignation avec votre officier de compliance HIPAA ; la plateforme enregistre qui a changé le registre à chaque écriture (voir Audit trail).

2. Choisir des ids de liste vs segment

Le registre retient des ids d’audience — chaque entrée est soit un id de liste de contact soit un id de segment, passé comme string brut. Le precheck de lancement de campagne ne résout que les audiences de type list et segment contre le registre ; les audiences assemblées par contact (tous les contacts, upload CSV, entrée manuelle) sont évaluées destinataire par destinataire à l’heure d’envoi, donc elles n’ont pas d’id de registre à désigner. Pour redériver l’id pour une désignation :
Copiez le champ id de la liste ou du segment que vous désignez. Les ids font 1–128 caractères après trim ; tout ce qui est plus long ou vide est rejeté avec 422 à l’écriture. Le registre retient au maximum 500 ids par organisation — un PUT en portant plus renvoie 422.
Désignez l’id de source, pas une copie en aval. Si une liste porteure de PHI alimente un segment dérivé, décidez si le segment dérivé contient aussi du PHI et désignez-le explicitement — le precheck vérifie l’id que la campagne référence réellement, rien d’autre.

3. Le swap PUT atomique

Le registre a une opération d’écriture : un PUT de remplacement total. Il n’y a pas de PATCH, pas de DELETE par id — chaque écriture remplace l’ensemble désigné entier en une seule instruction atomique, donc un GET concurrent ne voit jamais une mise à jour partiellement appliquée.
La réponse renvoie l’ensemble stocké :
Le body est idempotent : envoyer le même ensemble complet deux fois produit le même registre stocké et deux lignes d’audit distinctes. Un tableau vide nettoie toute désignation :
Parce que l’écriture est un swap, chaque client doit suivre read-modify-write : GET le registre actuel, ajoutez ou enlevez votre id dans le résultat, et PUT l’ensemble entier en retour. Ne construisez jamais le body depuis l’état local seul — vous supprimeriez silencieusement des désignations qu’un autre opérateur a ajoutées. Pour lever une désignation, PUT le registre sans cet id. Pour re-désigner, PUT avec l’id ajouté en retour. Les ids individuels qui survivent à un swap sont inchangés ; seule la participation à l’ensemble compte.

4. Comment le precheck de lancement utilise le registre

Deux gates protègent le PHI à des points différents, et le registre alimente le premier :
  1. Precheck de lancement (niveau campagne, gate dur). Avant qu’une campagne ne quitte brouillon/programmée, le precheck résout son id d’audience contre le registre. Un id désigné plus un BAA qui n’est pas executed et en terme refuse le lancement avec 422 HIPAA_BAA_REQUIRED — avant qu’un seul destinataire ne soit inscrit. Si l’état de compliance ne peut être lu, le precheck échoue fermé avec 500 HIPAA_BAA_GATE_DB_FAIL plutôt que d’admettre silencieusement l’audience.
  2. Gate d’envoi par destinataire (heure de message, inchangé). Le gate d’envoi existant s’applique toujours à chaque envoi individuel et ne consulte pas le registre — les envois legacy one-off sont gouvernés par lui seul.
Un lancement bloqué affleure avec le refus ci-dessous. Le details.reason vous dit exactement quel état BAA le dé-bloque :
Il y a deux façons de dé-bloquer, et ce sont des décisions de compliance, pas des décisions de plateforme :
  • Résoudre le BAA — l’exécuter ou le ré-exécuter pour que le gate passe. C’est le bon chemin quand l’audience porte vraiment du PHI.
  • Lever la désignation — PUT le registre sans l’id d’audience. C’est le bon chemin seulement quand l’audience a été désignée par erreur. Lever une désignation pour contourner le gate est visible dans votre propre journal d’audit.
Dans le wizard de campagne du dashboard, choisir une audience désignée montre un avertissement consultatif à l’étape d’audience. L’avertissement ne bloque pas le bouton Suivant — la désignation peut être levée ou le BAA exécuté avant le lancement — mais le gate dur au lancement s’applique toujours.

5. Audit trail

Deux classes de registres atterrissent dans le journal d’audit de votre organisation :
  • hipaa.phi_audiences.set — une ligne par PUT, enregistrant l’utilisateur agissant, l’organisation et l’ensemble d’ids post-écriture complet. C’est votre histoire de versionnement : le registre n’a pas de ressource de révision séparée — la séquence de lignes d’audit est l’historique de versions. Pour reconstruire ce qui a été désigné à un point dans le temps, parcourez les lignes set en arrière ; pour revenir, PUT l’ensemble d’ids d’une ligne précédente.
  • Refus de lancement HIPAA_BAA_REQUIRED — chaque lancement bloqué est loggé avec la raison du refus et l’audience en évaluation. Ces lignes font double emploi comme votre file d’incidents : un refus signifie soit que du travail de compliance est en attente (BAA non exécuté) soit qu’une désignation et une campagne sont en désaccord.
Passez les deux classes en revue à un rythme qui correspond à votre programme de compliance — hebdomadaire est un défaut workable pour un workspace de santé actif. Exportez le journal d’audit à côté de votre journal d’accès PHI lors de l’assemblage de preuves pour un audit externe ; le pack HIPAA du binder de preuves roule la posture BAA et la journalisation d’accès PHI en un téléchargement signé. Runbook d’incident pour un refus inattendu :
  1. Lisez le details.reason et details.audience.id du refus.
  2. Vérifiez GET /api/v1/compliance/baa/ — si le BAA est pending/expired/non exécuté, résolvez-le via le flux BAA.
  3. Si le BAA est sain, vérifiez si l’audience devrait être désignée en premier lieu : GET /api/v1/compliance/hipaa/phi-audiences et comparez avec votre carte de données. Levez une désignation erronée avec un swap (PUT sans l’id).
  4. Enregistrez le résultat dans votre propre registre d’incidents — les lignes d’audit ci-dessus sont la preuve que vous citez.

6. Troubleshooting des conflits d’écrasement concurrent

Le PUT du registre ne renvoie jamais 409 — le swap atomique en une seule instruction signifie qu’une écriture commite toujours, et le dernier écrivain gagne. Le risque de conflit est les mises à jour perdues entre opérateurs, pas des écritures rejetées :
  • Opérateur A et opérateur B font tous les deux GET le registre.
  • A ajoute list_aaa et PUT. B — travaillant depuis le snapshot pré-A — ajoute list_bbb et PUT.
  • Le swap de B supprime silencieusement list_aaa.
Mitigations :
  • Lire immédiatement avant d’écrire. Gardez la fenêtre read-modify-write courte ; ne portez pas un registre récupéré à travers une session d’édition — re-GET quand vous êtes prêt pour PUT.
  • Vérifier après l’écriture. GET une fois de plus et confirmez que votre id est présent et qu’aucune désignation non connectée n’a été perdue. Si quelque chose a disparu, les lignes hipaa.phi_audiences.set du journal d’audit montrent quel écrivain l’a écrasée et quel ensemble restaurer.
  • Sérialiser les éditions du registre organisationnellement. Parce que la désignation est une attestation de compliance, routez les éditions par un rôle (l’officier de compliance) plutôt que de les répandre entre opérateurs — un fix procédural qui élimine la course entièrement.
Si vous voyez 422 au lieu du succès, la cause est la validation, pas le conflit : plus de 500 ids, un id vide après trim, ou un id de plus de 128 caractères. Trimez et réessayez avec l’ensemble complet.

Voir aussi