MACM and ADX

From IHRIS Wiki
Revision as of 08:07, 2 September 2015 by Litlfred (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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:


<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>