Signal Alerts & Clinical Context

Receive alerts when your patient has a new clinical encounter

Background

When Particle identifies a critical new clinical event for a patient that a customer has enrolled in Signal , we will send the customer an alert via webhook notification. The alert will include key details on the event (e.g., which facility the event occurred at) and information to pull the additional, critical clinical context (e.g., the fileID to retrieve the relevant discharge summary file).

Customers will integrate Signal Alerts into their existing clinical workflows and queues to inform when to take action to prevent costly complications for a patient, and what actions to take.

Receive Signal Alerts

You will need to set up your callback endpoint(s) in order to receive Signal Notifications for the patients whom you are monitoring. Refer to the Event Notifications documentation on how to set up your endpoint(s).

There are two general categories of alerts that Particle will send to a customer for any patients enrolled in Signal, which will typically trigger different customer workflows:

1. Event Detected

Alerts that fall under this category will notify a customer when any new activity is occurring for their patients on the networks. Timeliness is a critical aspect of these alerts - while the alerts will not necessarily include the full clinical context on the patient encounter, they will inform the customer as soon as possible that new activity has occurred. This gives customers the option to outreach the patient and/or the facility to capture any additional information.

Network Alerts

These alerts will be triggered when Particle detects activity for one of your patients at another organization connected to Carequality or eHealthExchange.

Network Alert Payloads

{
  "specversion": "1.0,
  "type": "com.particlehealth.api.v2.networkalert",
  "subject": "Network Alert",
  "source": "api/notifications",
  "id": "0fc6f787-0f28-4dc2-a224-7c23e19c0e60"
  "time": "2024-07-22T10:10:10Z"
  "datacontenttype": application/json"
	"data": {
    "network_alert_id": "4eca404f-51fb-4d9a-a723-459fad24c09c",
    "particle_patient_id": "test-particle-patient-id",
    "network_organizations": [
	    {
		    "name": "Rochester Hospital",
		    "oid": "2.16.840.1.113883.3.8391.5.710576",
	    }
    ],
    "alert_time": "2024-07-22T10:10:10Z",
  }
}

All relevant information for the Network Alert will be included in the webhook notification payload; there is no additional information to retrieve.

ADTs

These alerts will be triggered when Particle receives an ADT for a patient the customer is monitoring from one of our ADT partners.

Note a customer must be contracted with the ADT partner in order to receive ADT notifications. Contact your Particle representative for more information on how to set up ADTs.

{
  "specversion": "1.0,
  "type": "com.particlehealth.api.v2.healthix.adt",
  "subject": "ADT-A08",
  "source": "api/notifications",
  "id": "d2c1fd46-8d3e-484b-9d0f-f4651c6d45e2"
  "time": "2024-07-22T10:10:10Z"
  "datacontenttype": application/json"
	"data": {
    "message_id": "4eca404f-51fb-4d9a-a723-459fad24c09c",
    "particle_patient_id": "test-particle-patient-id"
    "event_type": "AO1",
  }
}
{
  "specversion": "1.0,
  "type": "com.particlehealth.api.v2.bamboo.adt",
  "subject": "ADT-A04",
  "source": "api/notifications",
  "id": "d2c1fd46-8d3e-484b-9d0f-f4651c6d45e2"
  "time": "2024-07-22T10:10:10Z"
  "datacontenttype": application/json"
	"data": {
    "message_id": "4eca404f-51fb-4d9a-a723-459fad24c09c",
    "particle_patient_id": "test-particle-patient-id"
  }
}

The subject in the ADT notification will indicate what type of ADT that has been received for the patient (e.g., an ADT-A03 for a discharge). See FAQs for more details.

Customers can choose to retrieve the full, raw ADT message in HL7v2 format by placing a GET request to our HL7v2 API with the message_id provided in the webhook notification. Note that the HL7 message will be embedded inside a JSON structure, which is encoded in Base64.

PATH/hl7v2/{message_id}
METHODGET

Sample Response

Here is a sample base64 encoded HL7v2 API response:

eyJobDdNZXNzYWdlIjoiTVNIfF5+XFwmfFBhcnRpY2xlIEhlYWx0aF9BRFR8MTEyMl5TdC4gTWFyeSBIb3NwaXRhbF5IT1N8UkVDRUlWSU5HX0FQUHwxMjM0XlNhbXBsZSBIZWFsdGh8MjAxOTAzMDYwODE5NDl8fEFEVF5BMDh8NzUyZjNlYWItMmQxMS00MTFhLWI1OTctMmIwODMyNWQxZjIwfFB8Mi41XHJFVk58QTA4fDIwMTkwMzA1MjE0MzAwfHxFRElUX0VOQ09VTlRFUlxyUElEfDF8MzU3NzQ0MTBeXl5QUF5QUHxhNTc4MmEwNi05NWI1LTQ3YjMtYmUxOS0xMGVhNjA2OTNmM2NeXl5zYW1ec2FtfHxXZWFzbGV5XkZyZWRefHwxOTc4MDQwMXxNfHx8MTE0MDAgTGFuc2Rvd25lIFN0Xl5Cb3N0b25eTUFeMDIyMTV8fHx8fHx8NDM5NjgyMzg5MDY0fFxyUEQxfHx8fDEwNjM0ODQwNTNeSGFxdWVeTW9oYW1tZWReXl5eXHJQVjF8MXxFfHx8fHwxNjAxMjM0NTY3XlJ1YmV1c15IYWdyaWReXl5efHx8fHx8fEhvbWV8fHx8fDQ1NDEyMzQ1Njc4OXx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHwyMDE5MDMwNTIxNDMwMHx8fHx8fDMxMzc3NTczXHJJTjF8MXx8fFNlbGYgUGF5ICBKfHx8fHx8fHx8fHxTZWxmIFBheXx8fHx8fHx8fHx8fHx8fHx8fHx8fFVOS05PV05cclpNRHw1MTYwM2M2NS04MzliLTQ4YTAtOWU5Zi1iM2I3ZmEwYzEzZDBcclpQUHxQUk9HUkFNU1xyWlBQfC0tLS0tLS0tXHJaUFB8MS4gU2FtcGxlIEhlYWx0aFxyWlBQfDIuIEFDTUUgSGVhbHRoXHJaUFB8XHJaUFB8XHJaUFB8UFJBQ1RJQ0VTXHJaUFB8LS0tLS0tLS1cclpQUHwxLiBQcmFjdGljZSBVbmtub3duXHJaUFB8XHJaUFB8XHJaUFB8Q0FSRSBDT09SRElOQVRPUlNcclpQUHwtLS0tLS0tLS0tLS0tLS0tLVxyWlBQfE5hbWUuICAgOiBUcmFuc2l0aW9ucyBvZiBDYXJlIFRlYW1cclpQUHxQaG9uZS4gIDogODU1LTY3Ny04Nzg3XHJaUFB8RW1haWwuICA6IFxyWlBQfEZheC4gICAgOiA4NjYtNTY3LTEwMTBcclpQUHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJaUFB8TmFtZS4gICA6IFV0aWxpemF0aW9uIE1hbmFnZW1lbnRcclpQUHxQaG9uZS4gIDogODc3LTMzMy02MTYxXHJaUFB8RW1haWwuICA6IFxyWlBQfEZheC4gICAgOiBcclpQUHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJaUFB8XHJaUFB8XHJaUFB8QURNSVQgQ0FSRSBJTlNUUlVDVElPTlNcclpQUHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyWlBQfDEuIEFsbCBvdGhlciBoZWFsdGggcGxhbnMgY2FsbCAoMjEyKSA1NTUtODY5NyBhbmQgYXNrIHRvIHNwZWFrIHdpdGggdGhlIEV4dGVuc2l2aXN0IG9uIGNhbGwuXHJaUFB8Mi4gRmlkZWxpcyBNTVAgY2FsbCAoODc3KSAzMzMtNjE2MSBmb3IgYW4gYXV0aG9yaXphdGlvbi5cclpQUHxcclpQUHxcclpQUHxESVNDSEFSR0UgQ0FSRSBJTlNUUlVDVElPTlNcclpQUHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclpQUHwxLiBDYWxsICg4NTUpIDI1NS04MjgyIHRvIHJlYWNoIG9yIGdldCBhIG1lc3NhZ2UgdG8gYSBUcmFuc2l0aW9uIENvb3JkaW5hdG9yLlxyWlBQfFxyWlBQfFxyWlBQfE9USEVSIENBUkUgUFJPVklERVJTXHJaUFB8LS0tLS0tLS0tLS0tLS0tLS0tLS1cclpQUHxOYW1lLiAgIDogTHVuYSBMb3ZlZ29vZCBcclpQUHxQaG9uZS4gIDogXHJaUFB8RW1haWwuICA6IFxyWlBQfEZheC4gICAgOiBcclpQUHxDb2hvcnQgTmFtZSAgICA6IFByYWN0aWNlIFVua25vd25cclpQUHwtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJaUFB8XHJaUFB8XHIifQ==

Which corresponds to the following decoded JSON HL7v2 message:

{"hl7Message":"MSH|^~\\&|Particle Health_ADT|1122^St. Mary Hospital^HOS|RECEIVING_APP|1234^Sample Health|20190306081949||ADT^A08|752f3eab-2d11-411a-b597-2b08325d1f20|P|2.5\rEVN|A08|20190305214300||EDIT_ENCOUNTER\rPID|1|35774410^^^PP^PP|a5782a06-95b5-47b3-be19-10ea60693f3c^^^sam^sam||Weasley^Fred^||19780401|M|||11400 Lansdowne St^^Boston^MA^02215|||||||439682389064|\rPD1||||1063484053^Haque^Mohammed^^^^\rPV1|1|E|||||1601234567^Rubeus^Hagrid^^^^|||||||Home|||||454123456789|||||||||||||||||||||||||20190305214300||||||31377573\rIN1|1|||Self Pay  J|||||||||||Self Pay|||||||||||||||||||||UNKNOWN\rZMD|51603c65-839b-48a0-9e9f-b3b7fa0c13d0\rZPP|PROGRAMS\rZPP|--------\rZPP|1. Sample Health\rZPP|2. ACME Health\rZPP|\rZPP|\rZPP|PRACTICES\rZPP|--------\rZPP|1. Practice Unknown\rZPP|\rZPP|\rZPP|CARE COORDINATORS\rZPP|-----------------\rZPP|Name.   : Transitions of Care Team\rZPP|Phone.  : 855-677-8787\rZPP|Email.  : \rZPP|Fax.    : 866-567-1010\rZPP|-------------------------------------\rZPP|Name.   : Utilization Management\rZPP|Phone.  : 877-333-6161\rZPP|Email.  : \rZPP|Fax.    : \rZPP|-------------------------------------\rZPP|\rZPP|\rZPP|ADMIT CARE INSTRUCTIONS\rZPP|-----------------------\rZPP|1. All other health plans call (212) 555-8697 and ask to speak with the Extensivist on call.\rZPP|2. Fidelis MMP call (877) 333-6161 for an authorization.\rZPP|\rZPP|\rZPP|DISCHARGE CARE INSTRUCTIONS\rZPP|---------------------------\rZPP|1. Call (855) 255-8282 to reach or get a message to a Transition Coordinator.\rZPP|\rZPP|\rZPP|OTHER CARE PROVIDERS\rZPP|--------------------\rZPP|Name.   : Luna Lovegood \rZPP|Phone.  : \rZPP|Email.  : \rZPP|Fax.    : \rZPP|Cohort Name    : Practice Unknown\rZPP|-------------------------------------\rZPP|\rZPP|\r"}

2. Data Available

Alerts that fall under this category will notify a customer when critical new clinical data is available for to review for their patients. These alerts provide the critical clinical context on any patient encounters that have occurred, to inform the customer of what type(s) of patient follow needs to be conducted to prevent costly complications (e.g., readmissions). In addition, these alerts will highlight the key documents and resources relevant to the clinical event, so that the customer has the full context readily available without needing to sift through irrelevant documents.

"Data Available" alerts include New Encounter Alerts, Referral Alerts, and Discharge Summary Alerts. These alerts are triggered when Particle identifies a new encounter, new referral /specialist encounter, and new discharge summary respectively. All of these alerts follow the same struct:

{
  "specversion": "1.0",
  "type": "com.particlehealth.api.v2.encounter",
  "subject": "New Encounter",
  "source": "api/notifications",
  "id": "ea77d12d-bb97-438e-82eb-1b0d10a7e3ee",
  "time": "2024-07-22T10:10:10Z",
  "datacontenttype": "application/json",
	"data": {
    "network_organization": {
      "name": "Rochester Hospital",
      "oid": "2.16.840.1.113883.3.8391.5.710576"
    },
    "particle_patient_id": "d939196d-0c80-4e82-b0e1-19f9ee271085",
    "query_id" : "e040207e-1d91-5f93-b0e1-19f9ee271085",
    "network_alert_ids": [
	    "1cac1ea7-f3a9-43b3-bca3-04d3ec4362c5",
    ],
    "adt_message_ids": [
	    "6e7303bd-2c1a-49f2-add0-820babbdb95a",
    ],
    "resources": [
      {
	      "file_id": "d6a96f73-eb18-4faa-b021-143e7777fe8b",
        "resource_ids": [
          "Encounter/b10fe2ef-47f9-4507-97c8-1a8c2215478e"
        ]
      }
    ]
  }
}
{
  "specversion": "1.0",
  "type": "com.particlehealth.api.v2.referralalert",
  "subject": "Referral Complete",
  "source": "api/notifications",
  "id": "ea77d12d-bb97-438e-82eb-1b0d10a7e3ee",
  "time": "2024-07-22T10:10:10Z",
  "datacontenttype": "application/json",
	"data": {
    "network_organization": {
      "name": "Rochester Hospital",
      "oid": "2.16.840.1.113883.3.8391.5.710576"
    },
    "particle_patient_id": "d939196d-0c80-4e82-b0e1-19f9ee271085",
    "query_id" : "e040207e-1d91-5f93-b0e1-19f9ee271085",
    "network_alert_ids": [
	    "1cac1ea7-f3a9-43b3-bca3-04d3ec4362c5",
    ],
    "adt_message_ids": [
	    "6e7303bd-2c1a-49f2-add0-820babbdb95a",
    ],
    "referral_id": "a17846c4-4270-427b-b191-bd5e76cf8f30",
    "referral_status": "COMPLETE",
    "resources": [
      {
	      "file_id": "d6a96f73-eb18-4faa-b021-143e7777fe8b",
        "resource_ids": [
          "Encounter/b10fe2ef-47f9-4507-97c8-1a8c2215478e"
        ]
      }
    ]
  }
}
{
  "specversion": "1.0,
  "type": "com.particlehealth.api.v2.dischargesummary",
  "subject": "Discharge Summary",
  "source": "api/notifications",
  "id": "ea77d12d-bb97-438e-82eb-1b0d10a7e3ee",
  "time": "2024-07-22T10:10:10Z",
  "datacontenttype": "application/json",
	"data": {
    "network_organization": {
      "name": "Rochester Hospital",
      "oid": "2.16.840.1.113883.3.8391.5.710576"
    },
    "particle_patient_id": "d939196d-0c80-4e82-b0e1-19f9ee271085",
    "query_id" : "e040207e-1d91-5f93-b0e1-19f9ee271085",
    "network_alert_ids": [
	    "1cac1ea7-f3a9-43b3-bca3-04d3ec4362c5",
    ],
    "adt_message_ids": [
	    "6e7303bd-2c1a-49f2-add0-820babbdb95a",
    ],
    "resources": [
      {
	      "file_id": "d6a96f73-eb18-4faa-b021-143e7777fe8b",
        "resource_ids": [
          "Encounter/b10fe2ef-47f9-4507-97c8-1a8c2215478e",
          "DocumentReference/b10fe2ef-47f9-4507-97d8-1a8c2215478f",
        ]
      }
    ]
  }
}

Note: The file_ids and resource_ids may be an array, if Particle identifies multiple files and resources associated with the encounter that triggered the alert.

Retrieve Clinical Context

When you receive a "Data Available" alert, you can retrieve the corresponding clinical context in FLAT or FHIR format using the Deltas API. You have the option to choose how much clinical context you want to retrieve, including:

  1. Full patient history. You can retrieve the complete patient history in FLAT or FHIR.
  2. Data delta. Alternatively, you can retrieve any net-new clinical data identified since the last query (or another specified date), in FLAT or FHIR, by passing in the since parameter to the Deltas API.
  3. File that includes a new encounter. You can also retrieve all data within the same file as the new encounter that triggered the alerts, by passing the file_id provided in the notifications. Typically we see that any additional new data associated with an encounter will be captured from the networks in the same file as the encounter, so we recommend retrieving the all data within the same file as the new encounter, if you want to ensure you are capturing all data associated with the new encounter.
  4. Individual encounter. You can choose to retrieve only the data from the new encounter(s) that triggered the alerts, by passing the resource_ids provided in the notifications.

Non-CCDA Discharge Summary Files

Discharge summary data is frequently captured in unstructured physician notes, and in many cases is shared on the networks in an unstructured, non-CCDA format (e.g., pdf, png, txt, etc). While Particle is able to identify discharge summary files in non-CCDA format, we do not yet parse these types of non-CCDA files into FHIR or FLAT formats. We recognize, however, how crucial the discharge summary notes for our customers to take appropriate action on discharge patients to reduce readmission, which is why we make the source data available in the raw format.

ℹ️

Particle currently surfaces DocumentReferenceId in the Discharge Summary Alert for any discharge summaries we identify in non-CCDA format, so that you can retrieve the non-CCDA source data files via the Files API.

Note, non-CCDA discharge summary data is the only data that is NOT currently available in FHIR or FLAT format as part of Signal.

  • You will need to pass the query_id and the discharge summary DocumentReferenceId(as the file_idin the call to the Files API to retrieve the non-CCDA discharge summary files. Both ids are provided in the Signal Alert webhook notification.
  • The ids for the non-CCDA discharge summary files will be provided in the same array and according to the same schema as the file_ids pass for CCDA files in the Signal Alerts. See example in the Discharge Summary Alert above.
  • Additionally, we recognize our customers may want to pull the source data in the raw format received from the networks for other files (i.e., not just non-CCDA discharge summaries). You have the option to retrieve the raw source data file for ANY files via this same workflow (i.e., by calling the Files API).
  • See examples of how to retrieve non-CCDA discharge summary files in Examples section below.

Examples

See below for examples of how to request the data associated with the sample New Encounter Alert provided above. For further examples, more detailed instructions, and additional options (e.g., only retrieving data deltas for specific FHIR resources or FLAT datasets), check our Deltas Implementation.

Full patient history

  1. Retrieve full patient history in FLAT: GET /deltas/flat/{particle_patient_id}
    1. GET /deltas/flat/d939196d-0c80-4e82-b0e1-19f9ee271085
  2. Retrieve full patient history in FHIR:
    1. GET /deltas/R4/Patient/d939196d-0c80-4e82-b0e1-19f9ee271085/$everything

Data delta

  1. Retrieve data delta in FLAT: GET /deltas/flat/{particle_patient_id}?since="lastQuery"
    1. Since the last query: GET /deltas/flat/d939196d-0c80-4e82-b0e1-19f9ee271085?since="lastQuery"
    2. Since a specific date: GET /deltas/flat/d939196d-0c80-4e82-b0e1-19f9ee271085?since=2023-12-31
  2. Retrieve data delta in FHIR: GET /deltas/R4/Patient/{particle_patient_id}/$everything?since="lastQuery"
    1. Since the last query: GET /deltas/R4/Patient/ea77d12d-bb97-438e-82eb-1b0d10a7e3ee/$everything?since="lastQuery"
    2. Since a specific date: GET /deltas/R4/Patient/ea77d12d-bb97-438e-82eb-1b0d10a7e3ee/$everything?since=2023-12-31

File

  1. Retrieve the file where the encounter was identified in FLAT: GET /deltas/flat/File/{file_id}
    1. GET /deltas/flat/File/d6a96f73-eb18-4faa-b021-143e7777fe8b
  2. Retrieve the file where the encounter was identified in FHIR GET /deltas/R4/File/{file_id}
    1. GET /deltas/R4/File/d6a96f73-eb18-4faa-b021-143e7777fe8b

Encounter

  1. Retrieve the encounter in FLAT: GET /deltas/flat/Encounter/{resource_id}
    1. GET /deltas/flat/Encounter/b10fe2ef-47f9-4507-97c8-1a8c2215478e
  2. Retrieve the encounter in FHIR: GET /deltas/R4/Encounter/{resource_id}
    1. GET /deltas/R4/Encounter/b10fe2ef-47f9-4507-97c8-1a8c2215478e

Non-CCDA Discharge Summary Files

Example of how to pull down a non-CCDA discharge summary file associated with the sample Discharge Summary Alert webhook notification above. Note that the DocumentReferenceId will need to be passed in the file_id parameter.

Retrieve the raw source data for discharge summaries captured in non-CCDA format: GET v1/files/{query_id}/{file_id}

GET v1/files/e040207e-1d91-5f93-b0e1-19f9ee271085/b10fe2ef-47f9-4507-97d8-1a8c2215478f


What’s Next