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

VPRDPS.m

Go to the documentation of this file.
  1. VPRDPS ;SLC/MKB -- Pharmacy extract ;8/2/11 15:29
  1. ;;1.0;VIRTUAL PATIENT RECORD;**1,4,5**;Sep 01, 2011;Build 21
  1. ;;Per VHA Directive 2004-038, this routine should not be modified.
  1. ;
  1. ; External References DBIA#
  1. ; ------------------- -----
  1. ; ^OR(100) 5771
  1. ; ORX8 2467
  1. ; PSOORRL,^TMP("PS",$J) 2400
  1. ; PSS50,^TMP($J 4533
  1. ; PSS50P7,^TMP($J 4662
  1. ; PSSDI 4551
  1. ;
  1. ; ------------ Get medications from VistA ------------
  1. ;
  1. EN(DFN,BEG,END,MAX,ORIFN) ; -- find patient's meds
  1. N PS0,VPRN,VPRITM,TYPE,ID K ^TMP("PS",$J)
  1. S DFN=+$G(DFN) Q:DFN<1
  1. S BEG=$G(BEG,1410101),END=$G(END,4141015),MAX=$G(MAX,9999)
  1. ;
  1. ; get one med
  1. I $G(ORIFN) D EN1^VPRDPSOR(ORIFN,.VPRITM),XML(.VPRITM):$D(VPRITM) Q
  1. ;
  1. ; get all meds
  1. D OCL^PSOORRL(DFN,BEG,END) M ^TMP("VPRPS",$J)=^TMP("PS",$J)
  1. S TYPE=$G(FILTER("vaType"))
  1. S VPRN=0 F S VPRN=$O(^TMP("VPRPS",$J,VPRN)) Q:VPRN<1!(VPRN>MAX) S PS0=$G(^(VPRN,0)) D I $D(VPRITM)>9 D XML(.VPRITM)
  1. . S ID=$P(PS0,U),ORIFN=+$P(PS0,U,8) K VPRITM
  1. . Q:'ORIFN!'$D(^OR(100,ORIFN,0))
  1. . I $L(TYPE) Q:'$$MATCH
  1. . D:ORIFN EN1^VPRDPSOR(ORIFN,.VPRITM)
  1. K ^TMP("VPRPS",$J),^TMP("PS",$J),^TMP($J,"PSOI")
  1. Q
  1. ;
  1. MATCH() ; -- Return 1 or 0, if order matches FILTER criteria
  1. N Y S Y=0
  1. I ID["O" D
  1. . I TYPE="N",ID["N" S Y=1 Q
  1. . I TYPE="O",ID'["N" S Y=1 Q
  1. . ; TYPE="S",ID'["N",$$SUPPLY(ORIFN) S Y=1 Q
  1. I ID["I" D
  1. . N IV S IV=$S(ID["V":1,$G(^TMP("VPRPS",$J,VPRN,"B",0)):1,1:0)
  1. . I TYPE="V",IV S Y=1
  1. . I TYPE="I",'IV S Y=1
  1. Q Y
  1. ;
  1. SUPPLY(ORDER) ; -- Return 1 or 0, if ORDER is for a supply item
  1. N OI,Y S OI=$$OI^ORX8(ORDER),Y=0
  1. D ZERO^PSS50P7(+$P(OI,U,3),,,"PSOI")
  1. S Y=+$G(^TMP($J,"PSOI",+$P(OI,U,3),.09))
  1. Q Y
  1. ;
  1. NDF(DRUG,VPI,ORD) ; -- Set NDF data for dispense DRUG ien
  1. N VPRX,STR,VUID,X,I
  1. S DRUG=+$G(DRUG) Q:'DRUG
  1. D EN^PSSDI(50,,50,"901;902",DRUG,"VPRX")
  1. S STR=$S($G(VPRX(50,DRUG,901)):$G(VPRX(50,DRUG,901))_" "_$G(VPRX(50,DRUG,902)),1:"")
  1. D NDF^PSS50(DRUG,,,,,"NDF") S VPI=+$G(VPI,1)
  1. S MED("product",VPI)=DRUG_U_$G(^TMP($J,"NDF",DRUG,.01))_"^^D^"_STR_U_$G(ORD) ;Drug
  1. S X=$G(^TMP($J,"NDF",DRUG,20)) ;VA Generic
  1. S MED("product",VPI,"G")=X_U_$$VUID^VPRD(+X,50.6)
  1. S X=$G(^TMP($J,"NDF",DRUG,22)) ;VA Product
  1. S MED("product",VPI,"P")=X_U_$$VUID^VPRD(+X,50.68)
  1. S X=$G(^TMP($J,"NDF",DRUG,25)) ;VA Drug Class
  1. S MED("product",VPI,"C")=$P(X,U,2,3)_U_$$VUID^VPRD(+X,50.605)
  1. K ^TMP($J,"NDF",DRUG)
  1. Q
  1. ;
  1. VUID(ORDER) ; -- return VUID for VA Product in ORDER
  1. N X,Y,DRUG S Y=""
  1. S DRUG=$$VALUE^ORX8(+$G(ORDER),"DRUG")
  1. I DRUG D
  1. . D NDF^PSS50(DRUG,,,,,"NDF")
  1. . S X=$G(^TMP($J,"NDF",DRUG,22)),Y=$$VUID^VPRD(+X,50.68)
  1. . K ^TMP($J,"NDF")
  1. Q Y
  1. ;
  1. ; ------------ Return data to middle tier ------------
  1. ;
  1. XML(MED) ; -- Return patient meds as XML
  1. N ATT,X,Y,I,NAMES
  1. D ADD("<med>") S VPRTOTL=$G(VPRTOTL)+1
  1. S ATT="" F S ATT=$O(MED(ATT)) Q:ATT="" D I $L(Y) D ADD(Y)
  1. . I $O(MED(ATT,0)) D S Y="" Q ;multiples
  1. .. D ADD("<"_ATT_"s>")
  1. .. S I=0 F S I=$O(MED(ATT,I)) Q:I<1 D
  1. ... S X=$G(MED(ATT,I)),NAMES=""
  1. ... I ATT="dose" S NAMES="dose^units^unitsPerDose^noun^route^schedule^duration^conjunction^doseStart^doseStop^order^Z"
  1. ... I ATT="fill" S NAMES="fillDate^fillRouting^releaseDate^fillQuantity^fillDaysSupply^partial^Z"
  1. ... I ATT="product" S NAMES="code^name^vuid^role^concentration^order^Z"
  1. ... S Y="<"_ATT_" "_$$LOOP_$S(ATT'="product":"/>",1:">") D ADD(Y)
  1. ... Q:ATT'="product"
  1. ... S X=$G(MED(ATT,I,"O")) I $L(X) S Y="<ordItem "_$$LOOP_"/>" D ADD(Y)
  1. ... S X=$G(MED(ATT,I,"C")) I $L(X) S Y="<class "_$$LOOP_"/>" D ADD(Y)
  1. ... S X=$G(MED(ATT,I,"G")) I $L(X) S Y="<vaGeneric "_$$LOOP_"/>" D ADD(Y)
  1. ... S X=$G(MED(ATT,I,"P")) I $L(X) S Y="<vaProduct "_$$LOOP_"/>" D ADD(Y)
  1. ... D ADD("</product>")
  1. .. D ADD("</"_ATT_"s>")
  1. . S X=$G(MED(ATT)),Y="" Q:'$L(X)
  1. . I ATT="sig"!(ATT?1"ptIn"1.A) S Y="<"_ATT_" xml:space='preserve'>"_$$ESC^VPRD(X)_"</"_ATT_">" Q
  1. . I X'["^" S Y="<"_ATT_" value='"_$$ESC^VPRD(X)_"' />" Q
  1. . I $L(X)>1 S NAMES="code^name"_$S(ATT["Provider":U_$$PROVTAGS^VPRD,1:"")_"^Z",Y="<"_ATT_" "_$$LOOP_"/>"
  1. D ADD("</med>")
  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