MACM and ADX
Below are sequencing options for using mACM to report invalid ADX data submissions.
You create alerts using the Mobile Report Alert (ITI-84) transaction. An alert can be created for:
- each invalid data value
- or every time an ADX has one or more invalid data values
One that would need to be clarified is who the intended recipient of the alert. Likely this would this be submitting organization, though it's not immediately obvious how to infer this from the ADX message. However, we have noted that we have a problem that we need to include the mechanism in the ADX message. The mechanism is a CSD organization, and CSD allows an organizational contact. So, if we solve the mechanism problem, we solve the recipient problem.
mACM is somewhat flexible and allows a push or pull from the Alert Aggregator for finding new alerts.
- The pull of alerts uses the Query for Alert Status (ITI-85) transaction. This can be used, for example, by the HMIS to query for relevant alerts on invalid to display to a user in the DHIS2 web interface.
- The push (or dispatch) is not defined generically in the profile and can be done, for example by:
- sending an SMS
- sending an eMail
- using the DHIS2 messaging API: https://www.dhis2.org/doc/snapshot/en/developer/html/ch01s20.html
<sequenceDiagram>
opt Third Party/PoS Submission
PoS->Node IL: Submit ADX message Node IL->Node IL: Log headers (maybe data) Node IL->Node IL: Node HMIS: Translate local identifiers\n(e.g. site ID) to PEPFAR site ID Node IL->Node HMIS: Submit ADX message Node HMIS->Node IL: ACK or receipt\n(no validation) Node IL->PoS: ACK or receipt\n(no validation) loop Node submitted ADX data values Node HMIS->Node HMIS: validate ADX message Node HMIS->Node Alert Aggregator: initiate Mobile Report Alert (ITI-84)\n for invalid messages\n recipient inferred from ??? end
end
Node HMIS->Node IL: User/cron-initiated submission of ADX\nMay include more than the orignial ADX Node IL->Node IL: Log headers (maybe data) Node IL->Global IL: Submit ADX message Global IL->Global HMIS: Submit ADX message Global HMIS->Global IL: ACK of receipt\n(no validation) Global IL->Node IL: ACK of receipt\n(no validation) Node IL->Node IL: record headers Node IL->Node HMIS: ACK of receipt\n(no validation) loop global submitted ADX data values
Global HMIS->Global HMIS: validate ADX message Global HMIS->Global Alert Aggregator: initiate Mobile Report Alert (ITI-84)\n for invalid messages\n recipient inferred from ??? opt Global Alert Aggregator->Global Alert Aggregator: Dispatch alert to recipient\n (is this the correct actor?) end
end
opt Node AA fetches alerts from Global AA
loop periodic update Node IL->Global IL: submit Query for Alert Status (ITI-85)\n search against same recipient as above Global IL->Global Alert Aggregator: submit Query for Alert Status (ITI-85) Global Alert Aggregator->Global IL: Query for Alert Status (ITI-85) response Global IL->Node IL: Query for Alert Status (ITI-85) response Node IL->Node Alert Aggregator: Query for Alert Status (ITI-85) response Node Alert Aggregator->Node Alert Aggregator: Add alert to data store opt Node Alert Aggregator->Node Alert Aggregator: Dispatch alert to recipient end end
end
opt Node HMIS looks for alerts on Node AA
Node HMIS->Node Alert Aggregator: submit Query for Alert Status (ITI-85) Node Alert Aggregator->Node HMIS: Query for Alert Status (ITI-85) response
end
opt PoS looks for alerts on Node AA
PoS->Node IL: submit Query for Alert Status (ITI-85) Node IL->Node IL: submit Query for Alert Status (ITI-85) Node IL->Node Alert Aggregator: submit Query for Alert Status (ITI-85) Node Alert Aggregator->Node IL: Query for Alert Status (ITI-85) response Node IL->PoS: Query for Alert Status (ITI-85) response
end
</sequenceDiagram>