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

VPRDGMRA.m

Go to the documentation of this file.
  1. VPRDGMRA ;SLC/MKB -- Allergy/Reaction extract ;Aug 02, 2018@13:10:03
  1. ;;1.0;VIRTUAL PATIENT RECORD;**1,9,12**;Sep 01, 2011;Build 6
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^VA(200 10060
  1. ; %DT 10003
  1. ; GMRADPT 10099
  1. ; EN1^GMRAOR2 2422
  1. ; PSN50P41 4531
  1. ; PSN50P65 4543
  1. ; $$GET1^DIQ(120.86 3449
  1. ;
  1. ; ------------ Get reactions from VistA ------------
  1. ;
  1. EN(DFN,BEG,END,MAX,IFN) ; -- find patient's allergies/reactions
  1. N GMRA,GMRAL,VPRN,VPRITM,VPRCNT
  1. S DFN=+$G(DFN) Q:DFN<1
  1. S BEG=$G(BEG,1410101),END=$G(END,4141015),MAX=$G(MAX,9999),VPRCNT=0
  1. D EN1^GMRADPT
  1. ;
  1. ; get one reaction
  1. I $G(IFN) D EN1(IFN,.VPRITM),XML(.VPRITM) Q
  1. ;
  1. ; get all reactions
  1. I 'GMRAL D Q
  1. . S VPRITM("assessment")=$S(GMRAL=0:"nka",1:"not done")
  1. . S VPRITM("facility")=$$FAC^VPRD ;local stn#^name
  1. . S VPRITM("entered")=$$GET1^DIQ(120.86,DFN,3,"I") ;mwa p12 added date entered to nka/none return
  1. . D XML(.VPRITM)
  1. S VPRN=0 F S VPRN=+$O(GMRAL(VPRN)) Q:VPRN<1 D Q:VPRCNT'<MAX
  1. . K VPRITM D EN1(VPRN,.VPRITM) Q:'$D(VPRITM)
  1. . D XML(.VPRITM) S VPRCNT=VPRCNT+1
  1. Q
  1. ;
  1. EN1(ID,REAC) ; -- return a reaction in REAC("attribute")=value
  1. ; from EN: expects GMRAL(ID)
  1. N VPRY,GMRA,I,J,X,Y,SEV,TXT,SEV K REAC
  1. S GMRA=$G(GMRAL(ID)) D EN1^GMRAOR2(ID,"VPRY")
  1. S X=$P(VPRY,U,10) I $L(X) S X=$$DATE(X) Q:X<BEG Q:X>END S REAC("entered")=X
  1. S REAC("facility")=$$FAC^VPRD ;local stn#^name
  1. S REAC("id")=ID,REAC("name")=$P(VPRY,U) I $P(GMRA,U,9) D
  1. . S X=$P(GMRA,U,9),Y=+$P(X,"(",2) I 'Y,X["PSDRUG" S Y=50
  1. . S REAC("localCode")=X,REAC("vuid")=$$VUID^VPRD(+X,Y)
  1. S X=$P(VPRY,U,6) S:$L(X) REAC("mechanism")=X
  1. S X=$P(VPRY,U,5),REAC("source")=$E(X)
  1. S REAC("type")=$S($L(GMRA):$P(GMRA,U,7),1:$$DFO($P(VPRY,U,7)))_U_$P(VPRY,U,7)
  1. I $P(VPRY,U,4)="VERIFIED",$P(VPRY,U,9) S REAC("verified")=$P(VPRY,U,9)
  1. S I=0,SEV="" F S I=$O(VPRY("O",I)) Q:I<1 S X=$P(VPRY("O",I),U,2) S:X]SEV SEV=X ;find highest severity
  1. S:$L(SEV) REAC("severity")=SEV
  1. ; reactions
  1. S I=0 F S I=$O(GMRAL(ID,"S",I)) Q:I<1 D
  1. . S X=$G(GMRAL(ID,"S",I)),Y=+$P(X,";",2)
  1. . S REAC("reaction",I)=$P(X,";")_U_$$VUID^VPRD(Y,120.83)
  1. ; comments
  1. S I=0 F S I=$O(VPRY("C",I)) Q:I<1 D
  1. . S X=$G(VPRY("C",I)) K TXT
  1. . S Y=$P(X,U,3)_U_$P(X,U)
  1. . S Y=Y_U_$S($L($P(X,U,2)):$E($P(X,U,2)),1:"E")
  1. . S J=0 F S J=$O(VPRY("C",I,J)) Q:J<1 S X=$G(VPRY("C",I,J,0)),TXT(J)=X
  1. . K X S X=$$STRING^VPRD(.TXT)
  1. . S REAC("comment",I)=Y_U_X ;name^date^type^text
  1. ; drug info
  1. I $D(VPRY("I")) D
  1. . N ROOT S ROOT=$$B^PSN50P41
  1. . S I=0 F S I=$O(VPRY("I",I)) Q:I<1 S X=$G(VPRY("I",I)) D
  1. .. N IEN S IEN=$O(@ROOT@(X,0))
  1. .. S REAC("drugIngredient",I)=X_U_$$VUID^VPRD(IEN,50.416)
  1. I $D(VPRY("V")) D
  1. . S I=0 F S I=$O(VPRY("V",I)) Q:I<1 S X=$G(VPRY("V",I)) D
  1. .. D C^PSN50P65("",$P(X,U,2),"PSN")
  1. .. N IEN S IEN=+$O(^TMP($J,"PSN","C",$P(X,U),0))
  1. .. S REAC("drugClass",I)=$P(X,U,2)_U_$$VUID^VPRD(IEN,50.605)
  1. I GMRA="" S REAC("removed")=1 ;entered in error
  1. Q
  1. ;
  1. DATE(X) ; -- Return internal form of date X
  1. N %DT,Y
  1. S %DT="TXS" D ^%DT
  1. Q Y
  1. ;
  1. DFO(X) ; -- Return 'DFO' string for mechanism name(s)
  1. N I,P,Y S Y=""
  1. F I=1:1:$L(X,",") S P=$P(X,",",I),Y=Y_$S($E(P)=" ":$E(P,2),1:$E(P))
  1. S:Y="" Y=$G(X)
  1. Q Y
  1. ;
  1. ; ------------ Return data to middle tier ------------
  1. ;
  1. XML(REAC) ; -- Return patient reaction as XML
  1. ; as <element code='123' displayName='ABC' />
  1. N ATT,X,Y,I,P,NM,TAG
  1. D ADD("<allergy>") S VPRTOTL=$G(VPRTOTL)+1
  1. S ATT="" F S ATT=$O(REAC(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
  1. . I ATT="comment" D S Y="" Q
  1. .. S I=0,Y="<comments>" D ADD(Y)
  1. .. F S I=$O(REAC(ATT,I)) Q:I<1 S X=$G(REAC(ATT,I)) D
  1. ... S Y="<comment id='"_I
  1. ... S:$L($P(X,U,2)) Y=Y_"' entered='"_$P(X,U,2)
  1. ... S:$L($P(X,U,1)) Y=Y_"' enteredBy='"_$$ESC^VPRD($P(X,U,1))
  1. ... S:$L($P(X,U,3)) Y=Y_"' commentType='"_$P(X,U,3)
  1. ... S:$L($P(X,U,4)) Y=Y_"' commentText='"_$$ESC^VPRD($P(X,U,4))
  1. ... S Y=Y_"' />" D ADD(Y)
  1. .. D ADD("</comments>")
  1. . I $O(REAC(ATT,0)) D S Y="" Q
  1. .. S NM=ATT_$S($E(ATT,$L(ATT))="s":"es",1:"s") D ADD("<"_NM_">")
  1. .. S I=0 F S I=$O(REAC(ATT,I)) Q:I<1 D
  1. ... S X=$G(REAC(ATT,I)),Y="<"_ATT_" "
  1. ... F P=1:1 S TAG=$P("name^vuid^severity^Z",U,P) Q:TAG="Z" I $L($P(X,U,P)) S Y=Y_TAG_"='"_$$ESC^VPRD($P(X,U,P))_"' "
  1. ... S Y=Y_"/>" D ADD(Y)
  1. .. D ADD("</"_NM_">")
  1. . S X=$G(REAC(ATT)),Y="" Q:'$L(X)
  1. . I X'["^" S Y="<"_ATT_" value='"_$$ESC^VPRD(X)_"' />" Q
  1. . I $L(X)>1 D S Y=""
  1. .. S Y="<"_ATT_" "
  1. .. F P=1:1 S TAG=$P("code^name^Z",U,P) Q:TAG="Z" I $L($P(X,U,P)) S Y=Y_TAG_"='"_$$ESC^VPRD($P(X,U,P))_"' "
  1. .. S Y=Y_"/>" D ADD(Y)
  1. D ADD("</allergy>")
  1. Q
  1. ;
  1. ADD(X) ; Add a line @VPR@(n)=X
  1. S VPRI=$G(VPRI)+1
  1. S @VPR@(VPRI)=X
  1. Q