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

VPRDGMRC.m

Go to the documentation of this file.
  1. VPRDGMRC ;SLC/MKB -- Consult extract ;8/2/11 15:29
  1. ;;1.0;VIRTUAL PATIENT RECORD;**1,4,5,7**;Sep 01, 2011;Build 3
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^VA(200 10060
  1. ; GMRCAPI 6082
  1. ; GMRCGUIB 2980
  1. ; GMRCSLM1,^TMP("GMRCR",$J) 2740
  1. ; XUAF4 2171
  1. ;
  1. ; ------------ Get consults from VistA ------------
  1. ;
  1. EN(DFN,BEG,END,MAX,IFN) ; -- find patient's consults
  1. N VPRN,VPRX,VPRITM K ^TMP("GMRCR",$J,"CS")
  1. S DFN=+$G(DFN) Q:DFN<1
  1. S BEG=$G(BEG,1410101),END=$G(END,4141015),MAX=$G(MAX,9999)
  1. ;
  1. D OER^GMRCSLM1(DFN,"",BEG,END,"")
  1. S VPRN=0 F S VPRN=$O(^TMP("GMRCR",$J,"CS",VPRN)) Q:VPRN<1!(VPRN>MAX) S VPRX=$G(^(VPRN,0)) Q:$E(VPRX)="<" D
  1. . I $G(IFN),IFN'=+VPRX Q
  1. . K VPRITM D EN1(+VPRX,.VPRITM),XML(.VPRITM)
  1. K ^TMP("GMRCR",$J,"CS"),^TMP("VPRTEXT",$J)
  1. Q
  1. ;
  1. EN1(ID,CONS) ; -- return a consult in CONS("attribute")=value
  1. ; Expects DFN, VPRX=^TMP("GMRCR",$J,"CS",VPRN,0) [from EN]
  1. N VPRD,X0,VPRJ,X,VPRTIU
  1. K CONS,^TMP("VPRTEXT",$J)
  1. S CONS("id")=ID,CONS("requested")=$P(VPRX,U,2)
  1. S CONS("status")=$P(VPRX,U,3),CONS("service")=$P(VPRX,U,4)
  1. S CONS("procedure")=$P(VPRX,U,5),CONS("name")=$P(VPRX,U,7)
  1. I $P(VPRX,U,6)="*" S CONS("result")="SIGNIFICANT FINDINGS"
  1. S CONS("orderID")=$P(VPRX,U,8),CONS("type")=$P(VPRX,U,9)
  1. ;D DOCLIST^GMRCGUIB(.VPRD,ID) S X0=$G(VPRD(0)) ;=^GMR(123,ID,0)
  1. D GET^GMRCAPI(.VPRD,ID) S X0=$G(VPRD(0)) ;=^GMR(123,ID,0)
  1. S X=$P(X0,U,9) S:$L(X) CONS("urgency")=X
  1. S X=$P(X0,U,14) S:X CONS("provider")=X_U_$P($G(^VA(200,X,0)),U)_U_$$PROVSPC^VPRD(X)
  1. I $O(VPRD(20,0)) D
  1. . S X=$NA(^TMP("VPRTEXT",$J,"reason"))
  1. . S VPRJ=0 F S VPRJ=$O(VPRD(20,VPRJ)) Q:VPRJ<1 S @X@(VPRJ)=$G(VPRD(20,VPRJ,0))
  1. . S CONS("reason")=X
  1. I $D(VPRD(30))!$D(VPRD(30.1)) D
  1. . S X=$G(VPRD(30.1)),$P(X,U,2)=""
  1. . S:$D(VPRD(30)) $P(X,U,2)=VPRD(30)
  1. . S:$L(X) CONS("provDx")=X
  1. S VPRJ=0 F S VPRJ=$O(VPRD(50,VPRJ)) Q:VPRJ<1 S X=$G(VPRD(50,VPRJ)) D
  1. . N Y S Y=$$INFO^VPRDTIU(+X) Q:Y<1 ;draft or retracted
  1. . S CONS("document",VPRJ)=Y
  1. . S:$G(VPRTEXT) CONS("document",VPRJ,"content")=$$TEXT^VPRDTIU(X)
  1. S X=$P(X0,U,21),CONS("facility")=$S(X:$$STA^XUAF4(X)_U_$P($$NS^XUAF4(X),U),1:$$FAC^VPRD)
  1. Q
  1. ;
  1. ; ------------ Return data to middle tier ------------
  1. ;
  1. XML(CONS) ; -- Return patient consult as XML
  1. ; as <element code='123' displayName='ABC' />
  1. N ATT,X,Y,I,J,NAMES
  1. D ADD("<consult>") S VPRTOTL=$G(VPRTOTL)+1
  1. S ATT="" F S ATT=$O(CONS(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
  1. . S NAMES=$S(ATT="document":"id^localTitle^nationalTitle^vuid",ATT="provider":"code^name^"_$$PROVTAGS^VPRD,ATT="provDx":"code^name^system",1:"code^name")_"^Z"
  1. . I $O(CONS(ATT,0)) D S Y="" Q ;multiples
  1. .. D ADD("<"_ATT_"s>")
  1. .. S I=0 F S I=$O(CONS(ATT,I)) Q:I<1 D
  1. ... S X=$G(CONS(ATT,I)),Y="<"_ATT_" "_$$LOOP
  1. ... S X=$G(CONS(ATT,I,"content")) I '$L(X) S Y=Y_"/>" D ADD(Y) Q
  1. ... S Y=Y_">" D ADD(Y)
  1. ... S Y="<content xml:space='preserve'>" D ADD(Y)
  1. ... S J=0 F S J=$O(@X@(J)) Q:J<1 S Y=$$ESC^VPRD(@X@(J)) D ADD(Y)
  1. ... D ADD("</content>"),ADD("</"_ATT_">")
  1. .. D ADD("</"_ATT_"s>")
  1. . S X=$G(CONS(ATT)),Y="" Q:'$L(X)
  1. . I ATT="reason" D S Y="" Q
  1. .. S Y="<reason xml:space='preserve'>" D ADD(Y)
  1. .. S J=0 F S J=$O(@X@(J)) Q:J<1 S Y=$$ESC^VPRD(@X@(J)) D ADD(Y)
  1. .. D ADD("</reason>")
  1. . I X'["^" S Y="<"_ATT_" value='"_$$ESC^VPRD(X)_"' />" Q
  1. . I $L(X)>1 S Y="<"_ATT_" "_$$LOOP_"/>"
  1. D ADD("</consult>")
  1. Q
  1. ;
  1. LOOP() ; -- build sub-items string from NAMES and X
  1. N STR,P,TAG S STR=""
  1. F P=1:1 S TAG=$P(NAMES,U,P) Q:TAG="Z" I $L($P(X,U,P)) S STR=STR_TAG_"='"_$$ESC^VPRD($P(X,U,P))_"' "
  1. Q STR
  1. ;
  1. ADD(X) ; Add a line @VPR@(n)=X
  1. S VPRI=$G(VPRI)+1
  1. S @VPR@(VPRI)=X
  1. Q