Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: PSSHRQ2O

PSSHRQ2O.m

Go to the documentation of this file.
  1. PSSHRQ2O ;WOIFO/AV,TS,SG - Handles parsing a PEPS Drug Check Response ;09/20/07
  1. ;;1.0;PHARMACY DATA MANAGEMENT;**136,160**;9/30/97;Build 76
  1. ;
  1. ; @authors - Chris Flegel, Alex Vazquez, Tim Sabat
  1. ; @date - September 19, 2007
  1. ; @version - 1.0
  1. ;
  1. QUIT
  1. ;;
  1. OUT(DOCHAND,BASE) ;
  1. ; @DESC Parses the PEPSResponse XML and stores in object
  1. ;
  1. ; @DOCHAND Handle to XML document
  1. ; @BASE Base of output global
  1. ;
  1. NEW PSS,HASH,MESSAGE
  1. ;
  1. SET PSS("rootName")=$$NAME^MXMLDOM(DOCHAND,1)
  1. ;
  1. IF PSS("rootName")="exception" DO
  1. . ; Read error into hash variable
  1. . DO ERREAD(DOCHAND,.HASH)
  1. . ; Write hashed variable to output global
  1. . IF HASH("code")="FDBUPDATE" S MESSAGE="Vendor database updates are being processed." ; HASH("message")
  1. . ELSE IF $D(^TMP($J,BASE,"IN","DOSE"))>0 SET MESSAGE="An unexpected error has occurred."
  1. . ELSE SET MESSAGE="An unexpected error has occurred."
  1. . SET ^TMP($JOB,BASE,"OUT",0)="-1^"_MESSAGE
  1. . ;
  1. . ; Cleanup the out.exception global
  1. . KILL ^TMP($JOB,"OUT","EXCEPTION")
  1. ;
  1. IF PSS("rootName")="PEPSResponse" DO HNDLCK(DOCHAND,BASE)
  1. ;
  1. ; Clean up after using the handle
  1. DO DELETE^MXMLDOM(DOCHAND)
  1. KILL ^TMP($J,"OUT XML")
  1. QUIT
  1. ;
  1. HNDLCK(DOCHAND,BASE) ;
  1. ; @DESC This handles the parsing of the PEPSResponse XML element
  1. ;
  1. ; @DOCHAND Handle to XML document
  1. ; @BASE Base of output global
  1. ;
  1. ; @RETURNS Nothing
  1. ;
  1. NEW PSS
  1. ;
  1. ; if ping get the vendor database info and exit.
  1. IF $D(^TMP($JOB,BASE,"IN","PING")) SET ^TMP($JOB,BASE,"OUT",0)=0 DO GTDBINFO(DOCHAND,BASE) QUIT
  1. ;
  1. ; Get handle to drugCheck XML element
  1. SET PSS("drugCheck")=$$GTHANDLE(DOCHAND)
  1. SET PSS("child")=0
  1. ; Loop through elements of drugCheck
  1. FOR SET PSS("child")=$$CHILD^MXMLDOM(DOCHAND,PSS("drugCheck"),PSS("child")) QUIT:PSS("child")=0 DO
  1. . SET PSS("childName")=$$NAME^MXMLDOM(DOCHAND,PSS("child"))
  1. . ;
  1. . ; Build executable string
  1. . SET PSS("tag")=$$SELTAG(PSS("childName"))
  1. . SET PSS("executable")="DO "_PSS("tag")_"(DOCHAND,PSS(""child""),BASE)"
  1. . ;
  1. . XECUTE PSS("executable")
  1. . QUIT
  1. ;
  1. ; Set top level node to 1 or 0
  1. IF $DATA(^TMP($JOB,BASE,"OUT"))>1 SET ^TMP($JOB,BASE,"OUT",0)=1
  1. IF $DATA(^TMP($JOB,BASE,"OUT"))<10 SET ^TMP($JOB,BASE,"OUT",0)=0
  1. QUIT
  1. ;
  1. GTDBINFO(DOCHAND,BASE) ; get the Vendor database info.
  1. ; @DOCHAND Handle to XML document
  1. ; @BASE Base of output global
  1. ;
  1. NEW PSS,HEADER
  1. SET PSS("child")=0
  1. SET PSS("childName")=""
  1. ; get <Header> child
  1. FOR DO QUIT:PSS("childName")="Header"
  1. . SET PSS("child")=$$CHILD^MXMLDOM(DOCHAND,1,PSS("child"))
  1. . SET PSS("childName")=$$NAME^MXMLDOM(DOCHAND,PSS("child"))
  1. ;
  1. ; get <PEPSVersion> child of <Header> element
  1. SET HEADER=PSS("child")
  1. SET PSS("child")=0
  1. FOR DO QUIT:PSS("childName")="PEPSVersion"
  1. . SET PSS("child")=$$CHILD^MXMLDOM(DOCHAND,HEADER,PSS("child"))
  1. . SET PSS("childName")=$$NAME^MXMLDOM(DOCHAND,PSS("child"))
  1. ;
  1. SET ^TMP($JOB,BASE,"OUT","difIssueDate")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"difIssueDate")
  1. SET ^TMP($JOB,BASE,"OUT","difBuildVersion")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"difBuildVersion")
  1. SET ^TMP($JOB,BASE,"OUT","difDbVersion")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"difDbVersion")
  1. SET ^TMP($JOB,BASE,"OUT","customIssueDate")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"customIssueDate")
  1. SET ^TMP($JOB,BASE,"OUT","customBuildVersion")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"customBuildVersion")
  1. SET ^TMP($JOB,BASE,"OUT","customDbVersion")=$$VALUE^MXMLDOM(DOCHAND,PSS("child"),"customDbVersion")
  1. QUIT
  1. ;
  1. GTHANDLE(DOCHAND) ;
  1. ; @DESC Get handle to drugCheck element from PEPSResponse element
  1. ;
  1. ; @DOCHAND Handle to XML document
  1. ;
  1. ; @RETURNS Handle to drugCheck XML element
  1. ;
  1. NEW PSS
  1. ;
  1. SET PSS("child")=0
  1. ;
  1. ; Get next child of root element
  1. FOR SET PSS("child")=$$CHILD^MXMLDOM(DOCHAND,1,PSS("child")) QUIT:PSS("child")=0 DO
  1. . SET PSS("childName")=$$NAME^MXMLDOM(DOCHAND,PSS("child"))
  1. . SET:PSS("childName")="Body" PSS("drugCheckElement")=$$CHILD^MXMLDOM(DOCHAND,PSS("child"))
  1. ;
  1. QUIT PSS("drugCheckElement")
  1. ;
  1. SELTAG(NAME) ;
  1. ; @DESC Returns the appropriate tag to handle the XML element
  1. ;
  1. ; @NAME Name of the current XML element
  1. ;
  1. ; @RETURNS Returns the appropriate tag to handle the XML element
  1. ;
  1. QUIT:NAME="drugsNotChecked" "DRGNTCK^PSSHRQ23"
  1. ;
  1. QUIT:NAME="drugDrugChecks" "DRUGDRUG^PSSHRQ21"
  1. ;
  1. QUIT:NAME="drugTherapyChecks" "THERAPY^PSSHRQ22"
  1. ;
  1. QUIT:NAME="drugDoseChecks" "DRGDOSE^PSSHRQ23"
  1. QUIT
  1. ;
  1. ALTERROR(BASE) ;
  1. ; @DESC Handles alternate PEPS errors like being unable to
  1. ; connect to PEPS. Reads info from global in format
  1. ;
  1. ; ^TMP($JOB,"OUT","EXCEPTION")=MESSAGE
  1. ;
  1. ; @BASE Base of global to be written to
  1. ;
  1. ; @RETURNS Nothing
  1. ;
  1. SET ^TMP($JOB,BASE,"OUT",0)="-1^Vendor Database cannot be reached."
  1. ;
  1. ; Cleanup the out.exception global
  1. KILL ^TMP($JOB,"OUT","EXCEPTION")
  1. QUIT
  1. ;
  1. ERREAD(DOCHAND,HASH) ;
  1. ; @DESC Handles parsing the exception XML element and storing it
  1. ; in a hash variable
  1. ;
  1. ; @DOCHAND Handle to XML document
  1. ; @HASH ByRef, Hash variable used to store error info
  1. ;
  1. ; @RETURNS Nothing. Info stored in HASH param.
  1. ;
  1. NEW PSS
  1. ;
  1. SET PSS("child")=0
  1. ;
  1. ; Get next child of root element
  1. FOR SET PSS("child")=$$CHILD^MXMLDOM(DOCHAND,1,PSS("child")) QUIT:PSS("child")=0 DO
  1. . SET PSS("childName")=$$NAME^MXMLDOM(DOCHAND,PSS("child"))
  1. . SET:PSS("childName")="code" HASH("code")=$$GETTEXT^PSSHRCOM(DOCHAND,PSS("child"))
  1. . SET:PSS("childName")="message" HASH("message")=$$GETTEXT^PSSHRCOM(DOCHAND,PSS("child"))
  1. QUIT
  1. ;
  1. ;
  1. CLEXP ;Delete Profile drug exceptions for CPRS if all Prospective drugs have exceptions
  1. N PSSPEX1,PSSPEX2,PSSPEXDL
  1. I '$D(^TMP($J,PSSRBASE,"IN","DRUGDRUG")),'$D(^TMP($J,PSSRBASE,"IN","THERAPY")) Q
  1. I '$D(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS")) Q
  1. S PSSPEXDL=0
  1. S PSSPEX1="" F S PSSPEX1=$O(^TMP($J,PSSRBASE,"IN","PROSPECTIVE",PSSPEX1)) Q:PSSPEX1=""!(PSSPEXDL) D
  1. .I '$D(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX1)) S PSSPEXDL=1
  1. I PSSPEXDL D CLPAR Q
  1. S PSSPEX2="" F S PSSPEX2=$O(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX2)) Q:PSSPEX2="" D
  1. .I $P(PSSPEX2,";",3)="PROFILE" K ^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX2)
  1. Q
  1. ;
  1. ;
  1. CLPAR ;Some Exceptions exist, but not all prospective drugs have an exception
  1. N PSSPEX3,PSSPEX4,PSSPEX5,PSSPEX6,PSSPEX7,PSSPEX8,PSSPEXAR
  1. S PSSPEX3="" F S PSSPEX3=$O(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX3)) Q:PSSPEX3="" D:$P(PSSPEX3,";",3)="PROSPECTIVE"
  1. .S PSSPEX4="" F S PSSPEX4=$O(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX3,PSSPEX4)) Q:PSSPEX4="" D
  1. ..S PSSPEX5=$P($G(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX3,PSSPEX4)),"^",3) I PSSPEX5 S PSSPEXAR(PSSPEX5)=""
  1. S PSSPEX6="" F S PSSPEX6=$O(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX6)) Q:PSSPEX6="" D:$P(PSSPEX6,";",3)="PROFILE"
  1. .S PSSPEX7="" F S PSSPEX7=$O(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX6,PSSPEX7)) Q:PSSPEX7="" D
  1. ..S PSSPEX8=$P($G(^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX6,PSSPEX7)),"^",3) I PSSPEX8,$D(PSSPEXAR(PSSPEX8)) D
  1. ...K ^TMP($J,PSSRBASE,"OUT","EXCEPTIONS",PSSPEX6)
  1. Q