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

VPRDRMIM.m

Go to the documentation of this file.
  1. VPRDRMIM ;SLC/MKB -- FIM extract ;8/2/11 15:29
  1. ;;1.0;VIRTUAL PATIENT RECORD;**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. ; %DT 10003
  1. ; DIQ 2056
  1. ; RMIMRP 4745
  1. ;
  1. ; ------------ Get FIM cases from VistA ------------
  1. ;
  1. EN(DFN,BEG,END,MAX,IFN) ; -- find patient's FIM cases
  1. N VPRSITE,VPRS,VPRN,VPRY,ADM,VPRITM,VPRCNT
  1. D PRM^RMIMRP(.VPRSITE) Q:'$O(VPRSITE(1))
  1. ;
  1. ; get one case
  1. I $G(IFN) D EN1(IFN,.VPRITM),XML(.VPRITM) G ENQ
  1. ;
  1. ; get all patient FIM cases
  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. S VPRS=1 F S VPRS=$O(VPRSITE(VPRS)) Q:VPRS<1 D
  1. . S VPRN=DFN_U_VPRSITE(VPRS)
  1. . D LC^RMIMRP(.VPRY,VPRN) Q:VPRY(1)<1
  1. . S VPRN=1 F S VPRN=$O(VPRY(VPRN)) Q:(VPRN<1)!(VPRCNT'<MAX) D
  1. .. S ADM=$$DATE($P(VPRY(VPRN),U,4)) Q:ADM<BEG Q:ADM>END
  1. .. K VPRITM D EN1(+VPRY(VPRN),.VPRITM),XML(.VPRITM)
  1. .. S VPRCNT=VPRCNT+1
  1. ENQ ;done
  1. Q
  1. ;
  1. EN1(ID,FIM) ; -- return a case in FIM("attribute")=value
  1. N VPRM,X,I,TYPE,MOTOR,COGNTV K FIM
  1. S ID=+$G(ID) Q:ID<1 ;invalid ien
  1. D GC^RMIMRP(.VPRM,ID)
  1. S FIM("id")=ID,FIM("name")="Functional Independence Measurement"
  1. S FIM("facility")=$P(VPRSITE(1),U,2)_U_$P(VPRSITE(1),U) ;local stn#^name
  1. S X=$G(VPRM(1)),FIM("case")=$P(X,U,2)
  1. S FIM("care")=$P(X,U,7),FIM("impairmentGroup")=$P(X,U,8)
  1. S FIM("onset")=$$DATE($P(X,U,9))
  1. S FIM("admitted")=$$DATE($P(X,U,10))
  1. S FIM("discharged")=$$DATE($P(X,U,11))
  1. S X=+$P(X,U,12) I X D
  1. . N Y S Y=$$INFO^VPRDTIU(X) Q:Y<1 ;draft or retracted
  1. . S FIM("document")=Y ;ien^localTitle^natlTitle^VUID
  1. . S:$G(VPRTEXT) FIM("document","content")=$$TEXT^VPRDTIU(X)
  1. S X=$G(VPRM(3)) S:X FIM("admitClass")=+X
  1. S:$L($P(X,U,3)) FIM("interruptionCode")=$P(X,U,3)
  1. F I=4,6,8 I $P(X,U,I) S FIM("interruption",I)=$P(X,U,I,I+1)
  1. F I=5:1:9 I VPRM(I)'?1."^" D ;has data
  1. . S TYPE=$S(I=5:"admission",I=6:"discharge",I=7:"interim",I=8:"follow up",1:"goals")
  1. . S X=VPRM(I),MOTOR=$$TOTAL(X,1,13) Q:'MOTOR ;incomplete results
  1. . S COGNTV=$$TOTAL(X,14,18) Q:'COGNTV ;incomplete results
  1. . S FIM("assessment",TYPE)=X
  1. . S FIM("assessment",TYPE,"motorScore")=MOTOR
  1. . S FIM("assessment",TYPE,"cognitiveScore")=COGNTV
  1. . S FIM("assessment",TYPE,"totalScore")=MOTOR+COGNTV
  1. Q
  1. ;
  1. DATE(X) ; -- Return internal form of date X
  1. N %DT,Y
  1. S %DT="" D ^%DT S:Y<1 Y=X
  1. Q Y
  1. ;
  1. TOTAL(NODE,P1,P2) ; -- Return total of scores, or "" if incomplete
  1. N SUM,I,X
  1. S SUM=0 F I=P1:1:P2 S X=$P(NODE,U,I) S:X SUM=SUM+X I X<1 S SUM="" Q
  1. Q SUM
  1. ;
  1. ; ------------ Return data to middle tier ------------
  1. ;
  1. XML(FIM) ; -- Return FIM case as XML in @VPR@(I)
  1. N ATT,I,J,X,Y,NAMES,TEXT
  1. D ADD("<fim>") S VPRTOTL=$G(VPRTOTL)+1
  1. S ATT="" F S ATT=$O(FIM(ATT)) Q:ATT="" D D:$L(Y) ADD(Y)
  1. . I ATT="assessment" D S Y="" Q
  1. .. D ADD("<"_ATT_"s>")
  1. .. S I="" F S I=$O(FIM(ATT,I)) Q:I="" D
  1. ... S Y="<"_ATT_" type='"_I,J=""
  1. ... F S J=$O(FIM(ATT,I,J)) Q:J="" S Y=Y_"' "_J_"='"_FIM(ATT,I,J)
  1. ... S Y=Y_"' >" D ADD(Y)
  1. ... S X=FIM(ATT,I) D VAL(X),ADD("</"_ATT_">")
  1. .. D ADD("</"_ATT_"s>")
  1. . ;
  1. . I ATT?1"interruption"1N D S Y="" Q
  1. .. D ADD("<"_ATT_"s>")
  1. .. S I=0 F S I=$O(FIM(ATT,I)) Q:I<1 D
  1. ... S X=FIM(ATT,I),Y="<"_ATT_" transfer='"_$P(X,U)
  1. ... S:$P(X,U,2) Y=Y_"' return='"_$P(X,U,2)
  1. ... S Y=Y_"' >" D ADD(Y)
  1. .. D ADD("</"_ATT_"s>")
  1. . ;
  1. . S X=$G(FIM(ATT)),Y="" Q:'$L(X)
  1. . I ATT="document" D S Y="" Q
  1. .. S NAMES="id^localTitle^nationalTitle^vuid^Z",TEXT=$G(FIM(ATT,"content"))
  1. .. S Y="<"_ATT_" "_$$LOOP_$S($L(TEXT):">",1:"/>")
  1. .. D ADD(Y) Q:'$L(TEXT)
  1. .. S Y="<content xml:space='preserve'>" D ADD(Y)
  1. .. S I=0 F S I=$O(@TEXT@(I)) Q:I<1 S Y=$$ESC^VPRD(@TEXT@(I)) D ADD(Y)
  1. .. D ADD("</content>"),ADD("</"_ATT_">")
  1. . ;
  1. . I X'["^" S Y="<"_ATT_" value='"_$$ESC^VPRD(X)_"' />" Q
  1. . I $L(X)>1 S NAMES="code^name^Z",Y="<"_ATT_" "_$$LOOP_"/>"
  1. D ADD("</fim>")
  1. Q
  1. ;
  1. VAL(X) ; -- add FIM measurement values
  1. N NAMES,Y S Y=""
  1. S NAMES="eat^groom^bath^dressUp^dressLo^toilet^bladder^bowel^transChair^transToilet^transTub^locomWalk^locomStair^comprehend^express^interact^problem^memory^walkMode^comprehendMode^expressMode^Z"
  1. S Y="<values "_$$LOOP_"/>"
  1. D ADD(Y)
  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