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

PXVWPXML.m

Go to the documentation of this file.
  1. PXVWPXML ;ISP/LMT - Parse XML message from ICE ;Jul 17, 2018@07:01
  1. ;;1.0;PCE PATIENT CARE ENCOUNTER;**217**;Aug 12, 1996;Build 134
  1. ;
  1. ;
  1. EN ; Entry Point
  1. ;
  1. ; Parse XML message from ICE in ^TMP("PXICEXML",$J).
  1. ; Return parsed data in ^TMP("PXICEWEB",$J).
  1. ;
  1. N PXCALLBACK,PXFORECAST,PXHIST,PXLEVEL,PXN,PXOBSFOCUS,PXPATH
  1. ;
  1. S PXHIST=0
  1. S PXFORECAST=0
  1. S PXPATH=""
  1. S PXLEVEL=0
  1. S PXOBSFOCUS=""
  1. ;
  1. S PXCALLBACK("STARTELEMENT")="STARTEL^PXVWPXML"
  1. S PXCALLBACK("ENDELEMENT")="ENDEL^PXVWPXML"
  1. ;S PXCALLBACK("CHARACTERS")="CHARS^PXVWPXML"
  1. S PXCALLBACK("ERROR")="ERROR^PXVWPXML"
  1. D EN^MXMLPRSE($NA(^TMP("PXICEXML",$J)),.PXCALLBACK,"W")
  1. ;
  1. D FORMAT
  1. ;
  1. Q
  1. ;
  1. STARTEL(PXELEMENT,PXATTLIST) ; start element
  1. ;
  1. ; ZEXCEPT: PXFORECAST,PXHIST,PXLEVEL,PXN,PXPATH
  1. ;
  1. I PXELEMENT="substanceAdministrationEvents" D Q
  1. . S PXHIST=1
  1. . S PXFORECAST=0
  1. . S PXPATH=""
  1. . S PXLEVEL=0
  1. . K PXN
  1. ;
  1. I PXELEMENT="substanceAdministrationProposals" D Q
  1. . S PXHIST=0
  1. . S PXFORECAST=1
  1. . S PXPATH=""
  1. . S PXLEVEL=0
  1. . K PXN
  1. ;
  1. I 'PXHIST,'PXFORECAST Q
  1. ;
  1. S PXPATH=PXPATH_$S(PXPATH'="":",",1:"")_PXELEMENT
  1. S PXLEVEL=PXLEVEL+1
  1. ;
  1. I PXHIST D HISTORY
  1. I PXFORECAST D FORECAST
  1. ;
  1. Q
  1. ;
  1. HISTORY ; Process "history" portion of XML document
  1. ;
  1. ; ZEXCEPT: PXATTLIST,PXLEVEL,PXN,PXPATH
  1. ;
  1. N PXADMDT,PXCODE,PXCODESYS,PXDISNAME,PXX
  1. ;
  1. I PXPATH="substanceAdministrationEvent,id" D Q
  1. . S PXX=$G(PXATTLIST("root"))
  1. . ;S PXN(1)=$G(PXN(1))+1
  1. . S PXN(1)=$P(PXX,":",6)
  1. . S PXN(2)=""
  1. . S PXN(3)=""
  1. . I PXN(1)="" Q
  1. . S PXX=$G(^AUPNVIMM(+PXN(1),0))
  1. . S PXADMDT=$P($G(^AUPNVIMM(+PXN(1),12)),U,1)
  1. . I PXADMDT="" D
  1. . . S PXADMDT=$P($G(^AUPNVSIT(+$P(PXX,U,3),0)),U,1)
  1. . S PXX=$G(^AUTTIMM(+$P(PXX,U,1),0))
  1. . S ^TMP("PXICEWEB",$J,"HISTORY",PXN(1))=$P(PXX,U,1)_U_$P(PXX,U,3)_U_PXADMDT
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement" D Q
  1. . S PXN(2)=$G(PXN(2))+1
  1. . S PXN(3)=""
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement,substanceAdministrationEvent,doseNumber" D Q
  1. . I $G(PXN(1))=""!($G(PXN(2))="") Q
  1. . S PXX=$G(PXATTLIST("value"))
  1. . S $P(^TMP("PXICEWEB",$J,"HISTORY",PXN(1),"COMPONENT",PXN(2)),U,3)=PXX
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement,substanceAdministrationEvent,substance,substanceCode" D Q
  1. . I $G(PXN(1))=""!($G(PXN(2))="") Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.12.292" D ;CVX code system
  1. . . S $P(^TMP("PXICEWEB",$J,"HISTORY",PXN(1),"COMPONENT",PXN(2)),U,4,5)=PXCODE_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement,substanceAdministrationEvent,relatedClinicalStatement,observationResult,observationFocus" D Q
  1. . I $G(PXN(1))=""!($G(PXN(2))="") Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.1" D ;Vaccine Group code system
  1. . . S $P(^TMP("PXICEWEB",$J,"HISTORY",PXN(1),"COMPONENT",PXN(2)),U,1,2)=$P(PXDISNAME," Vaccine Group",1)_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement,substanceAdministrationEvent,relatedClinicalStatement,observationResult,observationValue,concept" D Q
  1. . I $G(PXN(1))=""!($G(PXN(2))="") Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.2" D ;validity code system
  1. . . S $P(^TMP("PXICEWEB",$J,"HISTORY",PXN(1),"COMPONENT",PXN(2)),U,6,7)=PXCODE_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationEvent,relatedClinicalStatement,substanceAdministrationEvent,relatedClinicalStatement,observationResult,interpretation" D Q
  1. . I $G(PXN(1))=""!($G(PXN(2))="") Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.3" D ;validity reason code system
  1. . . S PXN(3)=$G(PXN(3))+1
  1. . . S ^TMP("PXICEWEB",$J,"HISTORY",PXN(1),"COMPONENT",PXN(2),"REASON",PXN(3))=PXCODE_U_PXDISNAME
  1. ;
  1. Q
  1. ;
  1. FORECAST ; Process "forecast" portion of XML document
  1. ;
  1. ; ZEXCEPT: PXATTLIST,PXELEMENT,PXLEVEL,PXN,PXOBSFOCUS,PXPATH
  1. ;
  1. N PXCODE,PXCODESYS,PXDISNAME,PXHIGH,PXLOW,PXX
  1. ;
  1. I PXPATH="substanceAdministrationProposal" D Q
  1. . S PXN(1)=$G(PXN(1))+1
  1. . S PXN(2)=""
  1. ;
  1. ; What's being recommended
  1. I PXPATH="substanceAdministrationProposal,substance,substanceCode" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.1" D ;Vaccine Group code system (most common)
  1. . . S PXCODE="G:"_$P(PXDISNAME," Vaccine Group",1)
  1. . . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,2,3)=PXCODE_U_PXDISNAME
  1. . I PXCODESYS="2.16.840.1.113883.12.292" D ;CVX code system (less common)
  1. . . S PXCODE="C:"_PXCODE
  1. . . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,2,3)=PXCODE_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationProposal,proposedAdministrationTimeInterval" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXLOW=$E($G(PXATTLIST("low")),1,8)
  1. . I PXLOW'="" S PXLOW=$$HL7TFM^XLFDT(PXLOW)
  1. . S PXHIGH=$E($G(PXATTLIST("high")),1,8)
  1. . I PXHIGH'="" S PXHIGH=$$HL7TFM^XLFDT(PXHIGH)
  1. . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,4,5)=PXLOW_U_PXHIGH
  1. ;
  1. I PXPATH="substanceAdministrationProposal,validAdministrationTimeInterval" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXLOW=$E($G(PXATTLIST("low")),1,8)
  1. . I PXLOW'="" S PXLOW=$$HL7TFM^XLFDT(PXLOW)
  1. . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,6)=PXLOW
  1. ;
  1. I PXPATH="substanceAdministrationProposal,relatedClinicalStatement" D Q
  1. . S PXOBSFOCUS=""
  1. ;
  1. ; Which vaccine group recommendedation applies to
  1. I PXPATH="substanceAdministrationProposal,relatedClinicalStatement,observationResult,observationFocus" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.1" D ;Vaccine Group code system
  1. . . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,1)=$P(PXDISNAME," Vaccine Group",1)
  1. . S PXOBSFOCUS=PXCODE_U_PXDISNAME_U_PXCODESYS
  1. ;
  1. I PXPATH="substanceAdministrationProposal,relatedClinicalStatement,observationResult,observationValue,concept" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.5" D
  1. . . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,7,8)=PXCODE_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationProposal,relatedClinicalStatement,observationResult,interpretation" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXCODE=$G(PXATTLIST("code"))
  1. . S PXCODESYS=$G(PXATTLIST("codeSystem"))
  1. . S PXDISNAME=$G(PXATTLIST("displayName"))
  1. . I PXCODESYS="2.16.840.1.113883.3.795.12.100.6" D
  1. . . S PXN(2)=$G(PXN(2))+1
  1. . . S ^TMP("PXICEWEB",$J,"FORECAST",PXN(1),"REASON",PXN(2))=PXCODE_U_PXDISNAME
  1. ;
  1. I PXPATH="substanceAdministrationProposal,relatedClinicalStatement,observationResult,observationValue,text" D Q
  1. . I $G(PXN(1))="" Q
  1. . S PXX=$G(PXATTLIST("value"))
  1. . I $P(PXOBSFOCUS,U,3)="2.16.840.1.113883.3.795.12.100.10" D
  1. . . S $P(^TMP("PXICEWEB",$J,"FORECAST",PXN(1)),U,9)=PXX
  1. ;
  1. Q
  1. ;
  1. ENDEL(PXELEMENT) ; end element
  1. ;
  1. ; ZEXCEPT: PXFORECAST,PXHIST,PXLEVEL,PXPATH
  1. ;
  1. I PXELEMENT="substanceAdministrationEvents" D Q
  1. . S PXHIST=0
  1. ;
  1. I PXELEMENT="substanceAdministrationProposals" D Q
  1. . S PXFORECAST=0
  1. ;
  1. I 'PXHIST,'PXFORECAST Q
  1. ;
  1. S PXLEVEL=PXLEVEL-1
  1. S PXPATH=$P(PXPATH,",",1,PXLEVEL)
  1. ;
  1. Q
  1. ;
  1. ERROR(PXERR) ; error encountered
  1. ;
  1. ; TODO: Deal with error handling.
  1. ;
  1. Q
  1. ;
  1. FORMAT ; Group everything by Vaccine Group
  1. ;
  1. N PXCOMP,PXGRP,PXI,PXIEN,PXJ,PXNODE,PXNODE2
  1. ;
  1. S PXI=0
  1. F S PXI=$O(^TMP("PXICEWEB",$J,"FORECAST",PXI)) Q:'PXI D
  1. . S PXNODE=$G(^TMP("PXICEWEB",$J,"FORECAST",PXI))
  1. . S PXGRP=$P(PXNODE,U,1)
  1. . I PXGRP="" Q
  1. . S ^TMP("PXICEWEB",$J,PXGRP)=$P(PXNODE,U,2,9)
  1. . M ^TMP("PXICEWEB",$J,PXGRP,"REASON")=^TMP("PXICEWEB",$J,"FORECAST",PXI,"REASON")
  1. ;
  1. S PXI=0
  1. F S PXI=$O(^TMP("PXICEWEB",$J,"HISTORY",PXI)) Q:'PXI D
  1. . S PXNODE=$G(^TMP("PXICEWEB",$J,"HISTORY",PXI))
  1. . S PXJ=0
  1. . F S PXJ=$O(^TMP("PXICEWEB",$J,"HISTORY",PXI,"COMPONENT",PXJ)) Q:'PXJ D
  1. . . S PXNODE2=$G(^TMP("PXICEWEB",$J,"HISTORY",PXI,"COMPONENT",PXJ))
  1. . . S PXGRP=$P(PXNODE2,U,1)
  1. . . I PXGRP="" Q
  1. . . S ^TMP("PXICEWEB",$J,PXGRP,"HISTORY",PXI)=PXNODE_U_$P(PXNODE2,U,3,7)
  1. . . M ^TMP("PXICEWEB",$J,PXGRP,"HISTORY",PXI,"REASON")=^TMP("PXICEWEB",$J,"HISTORY",PXI,"COMPONENT",PXJ,"REASON")
  1. ;
  1. K ^TMP("PXICEWEB",$J,"FORECAST")
  1. K ^TMP("PXICEWEB",$J,"HISTORY")
  1. ;
  1. Q