| 1 | PXRMFF ;SLC/PKR - Clinical Reminders function finding evaluation. ;3/29/2007 | 
|---|
| 2 | ;;2.0;CLINICAL REMINDERS;**4,6**;Feb 04, 2005;Build 123 | 
|---|
| 3 | ;=========================================== | 
|---|
| 4 | EVAL(DFN,DEFARR,FIEVAL) ;Evaluate function findings. | 
|---|
| 5 | N FFIND,FFN,FILIST,FN,FUN,FUNIND,FUNN,FVALUE,JND | 
|---|
| 6 | N LOGIC,NL,ROUTINE,TEMP | 
|---|
| 7 | I '$D(DEFARR(25)) Q | 
|---|
| 8 | S FFN="FF" | 
|---|
| 9 | F  S FFN=$O(DEFARR(25,FFN)) Q:FFN'["FF"  D | 
|---|
| 10 | . K FN | 
|---|
| 11 | . S FUNIND=0 | 
|---|
| 12 | . F  S FUNIND=+$O(DEFARR(25,FFN,5,FUNIND)) Q:FUNIND=0  D | 
|---|
| 13 | .. S FUNN=$P(DEFARR(25,FFN,5,FUNIND,0),U,1) | 
|---|
| 14 | .. S FUN=$P(DEFARR(25,FFN,5,FUNIND,0),U,2) | 
|---|
| 15 | .. S TEMP=^PXRMD(802.4,FUN,0) | 
|---|
| 16 | .. S ROUTINE=$P(TEMP,U,2,3)_"(.FILIST,.FIEVAL,.FVALUE)" | 
|---|
| 17 | .. K FILIST | 
|---|
| 18 | .. S (JND,NL)=0 | 
|---|
| 19 | .. F  S JND=+$O(DEFARR(25,FFN,5,FUNIND,20,JND)) Q:JND=0  D | 
|---|
| 20 | ... S NL=NL+1 | 
|---|
| 21 | ... S FILIST(NL)=DEFARR(25,FFN,5,FUNIND,20,JND,0) | 
|---|
| 22 | .. S FILIST(0)=NL | 
|---|
| 23 | .. D @ROUTINE | 
|---|
| 24 | .. S FN(FUNIND)=FVALUE | 
|---|
| 25 | . S LOGIC=$G(DEFARR(25,FFN,10)) | 
|---|
| 26 | . S LOGIC=$S(LOGIC'="":LOGIC,1:0) | 
|---|
| 27 | . I @LOGIC | 
|---|
| 28 | . S FIEVAL(FFN)=$T | 
|---|
| 29 | . S FIEVAL(FFN,"NUMBER")=$P(FFN,"FF",2) | 
|---|
| 30 | . S FIEVAL(FFN,"FINDING")=$G(FUN)_";PXRMD(802.4," | 
|---|
| 31 | Q | 
|---|
| 32 | ; | 
|---|
| 33 | ;=========================================== | 
|---|
| 34 | EVALPL(DEFARR,FFIND,PLIST) ;Build a list of patients based on a function | 
|---|
| 35 | ;finding. | 
|---|
| 36 | N COUNT,DAS,DATE,DFN | 
|---|
| 37 | N FI,FIEVAL,FIEVT,FIL,FILIST,FILENUM,FINDPA,FN | 
|---|
| 38 | N FUN,FUNNM,FUNN,FUNNUM,FVALUE | 
|---|
| 39 | N IND,ITEM,JND,LOGIC,LNAME,NFI,NFUN,ROUTINE,TEMP,TERMARR,UNIQFIL | 
|---|
| 40 | S LOGIC=DEFARR(25,FFIND,10) | 
|---|
| 41 | I LOGIC="" Q | 
|---|
| 42 | ;Build the list of functions and findings used by the function finding. | 
|---|
| 43 | S (FUNNUM,NFUN)=0 | 
|---|
| 44 | F  S FUNNUM=+$O(DEFARR(25,FFIND,5,FUNNUM)) Q:FUNNUM=0  D | 
|---|
| 45 | . S NFUN=NFUN+1 | 
|---|
| 46 | . S FUNN=$P(DEFARR(25,FFIND,5,FUNNUM,0),U,1) | 
|---|
| 47 | . S FUN=$P(DEFARR(25,FFIND,5,FUNNUM,0),U,2) | 
|---|
| 48 | . S TEMP=^PXRMD(802.4,FUN,0) | 
|---|
| 49 | . S ROUTINE(NFUN)=$P(TEMP,U,2,3)_"(.FIL,.FIEVAL,.FVALUE)" | 
|---|
| 50 | . S (FI,NFI)=0 | 
|---|
| 51 | . F  S FI=+$O(DEFARR(25,FFIND,5,FUNNUM,20,FI)) Q:FI=0  D | 
|---|
| 52 | .. S NFI=NFI+1,FILIST(NFUN,NFI)=DEFARR(25,FFIND,5,FUNNUM,20,FI,0) | 
|---|
| 53 | . S FILIST(NFUN,0)=NFI | 
|---|
| 54 | ;A finding may be used in more than one function in the function | 
|---|
| 55 | ;finding so build a list of the unique findings. | 
|---|
| 56 | F IND=1:1:NFUN D | 
|---|
| 57 | . F JND=1:1:FILIST(IND,0) D | 
|---|
| 58 | .. S TEMP=$P(DEFARR(20,FILIST(IND,JND),0),U,1) | 
|---|
| 59 | .. S ITEM=$P(TEMP,";",1) | 
|---|
| 60 | .. S FILENUM=$$GETFNUM^PXRMDATA($P(TEMP,";",2)) | 
|---|
| 61 | .. S UNIQFIL(FILIST(IND,JND))="" | 
|---|
| 62 | K ^TMP($J,"PXRMFFDFN") | 
|---|
| 63 | S IND=0 | 
|---|
| 64 | F  S IND=$O(UNIQFIL(IND)) Q:IND=""  D | 
|---|
| 65 | . S FINDPA(0)=DEFARR(20,IND,0) | 
|---|
| 66 | . S FINDPA(3)=DEFARR(20,IND,3) | 
|---|
| 67 | . S FINDPA(10)=DEFARR(20,IND,10) | 
|---|
| 68 | . S FINDPA(11)=DEFARR(20,IND,11) | 
|---|
| 69 | . D GENTERM^PXRMPLST(FINDPA(0),IND,.TERMARR) | 
|---|
| 70 | . S LNAME(IND)="PXRMFF"_IND | 
|---|
| 71 | . K ^TMP($J,LNAME(IND)) | 
|---|
| 72 | . D EVALPL^PXRMTERL(.FINDPA,.TERMARR,LNAME(IND)) | 
|---|
| 73 | .;Get rid of the false part of the list. | 
|---|
| 74 | . K ^TMP($J,LNAME(IND),0) | 
|---|
| 75 | .;Build a complete list of patients. | 
|---|
| 76 | . S DFN=0 | 
|---|
| 77 | . F  S DFN=$O(^TMP($J,LNAME(IND),1,DFN)) Q:DFN=""  S ^TMP($J,"PXRMFFDFN",DFN)="" | 
|---|
| 78 | ;Evaluate the function finding for each patient. If the function | 
|---|
| 79 | ;finding is true then add the patient to PLIST. | 
|---|
| 80 | S DFN=0 | 
|---|
| 81 | F  S DFN=$O(^TMP($J,"PXRMFFDFN",DFN)) Q:DFN=""  D | 
|---|
| 82 | . K FIEVAL | 
|---|
| 83 | . S IND="" | 
|---|
| 84 | . F  S IND=$O(UNIQFIL(IND)) Q:IND=""  D | 
|---|
| 85 | .. S FIEVAL(IND)=0 | 
|---|
| 86 | .. S ITEM="" | 
|---|
| 87 | .. F  S ITEM=$O(^TMP($J,LNAME(IND),1,DFN,ITEM)) Q:ITEM=""  D | 
|---|
| 88 | ... S COUNT=0 | 
|---|
| 89 | ... F  S COUNT=$O(^TMP($J,LNAME(IND),1,DFN,ITEM,COUNT)) Q:COUNT=""  D | 
|---|
| 90 | .... S FILENUM=$O(^TMP($J,LNAME(IND),1,DFN,ITEM,COUNT,"")) | 
|---|
| 91 | .... S TEMP=^TMP($J,LNAME(IND),1,DFN,ITEM,COUNT,FILENUM) | 
|---|
| 92 | .... S DAS=$P(TEMP,U,1) | 
|---|
| 93 | .... S DATE=$P(TEMP,U,2) | 
|---|
| 94 | .... K FIEVT | 
|---|
| 95 | .... D GETDATA^PXRMDATA(FILENUM,DAS,.FIEVT) | 
|---|
| 96 | .... M FIEVAL(IND,COUNT)=FIEVT | 
|---|
| 97 | .... S FIEVAL(IND,COUNT,"DATE")=DATE,FIEVAL(IND,COUNT)=1 | 
|---|
| 98 | .;Save the top level results for each finding. | 
|---|
| 99 | . S IND=0 | 
|---|
| 100 | . F  S IND=$O(FIEVAL(IND)) Q:IND=""  D | 
|---|
| 101 | .. K FIEVT M FIEVT=FIEVAL(IND) | 
|---|
| 102 | .. S NFI=+$O(FIEVT(""),-1) | 
|---|
| 103 | .. D SFRES^PXRMUTIL(-1,NFI,.FIEVT) | 
|---|
| 104 | .. K FIEVAL(IND) M FIEVAL(IND)=FIEVT | 
|---|
| 105 | .;Evaluate the function finding for this patient. | 
|---|
| 106 | . K FN | 
|---|
| 107 | . F IND=1:1:NFUN D | 
|---|
| 108 | .. K FIL M FIL=FILIST(IND) | 
|---|
| 109 | .. D @ROUTINE(IND) | 
|---|
| 110 | .. S FN(IND)=FVALUE | 
|---|
| 111 | . I @LOGIC S ^TMP($J,PLIST,1,DFN,1,FFIND)="" | 
|---|
| 112 | ;Clean up. | 
|---|
| 113 | K ^TMP($J,"PXRMFFDFN") | 
|---|
| 114 | S IND="" | 
|---|
| 115 | F  S IND=$O(UNIQFIL(IND)) Q:IND=""  K ^TMP($J,LNAME(IND)) | 
|---|
| 116 | Q | 
|---|
| 117 | ; | 
|---|
| 118 | ;=========================================== | 
|---|
| 119 | MHVOUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the MHV output. | 
|---|
| 120 | ;None currently defined. | 
|---|
| 121 | Q | 
|---|
| 122 | ; | 
|---|
| 123 | ;=========================================== | 
|---|
| 124 | OUTPUT(INDENT,IFIEVAL,NLINES,TEXT) ;Produce the clinical | 
|---|
| 125 | ;maintenance output. None currently defined. | 
|---|
| 126 | Q | 
|---|
| 127 | ; | 
|---|