| 1 | PXRMCWH ; SLC/AGP - Computed findings for WH project. ;06/09/2006
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**1,4**;Feb 4, 2005;Build 21
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 | MAM(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed finding for
 | 
|---|
| 5 |  ;mammogram screening and review
 | 
|---|
| 6 |  ;
 | 
|---|
| 7 |  N CNT,CNT1,RESULT,WHDATE
 | 
|---|
| 8 |  S NGET=$S(NGET<0:-NGET,1:NGET)
 | 
|---|
| 9 |  S (CNT1,CNT,NFOUND)=0,DATE=$$NOW^PXRMDATE,TEST(1)=0
 | 
|---|
| 10 |  I $G(BDT)'="",$G(EDT)'="" S WHDATE=BDT_U_EDT
 | 
|---|
| 11 |  D LATEST^WVRPCPR(.RESULT,DFN,"M",$G(WHDATE),$G(NGET),"*")
 | 
|---|
| 12 |  I $D(RESULT)>0 D PROCESS(.RESULT,.CNT1,.TEST,.DATA,.TEXT,NGET,BDT,EDT,NFOUND)
 | 
|---|
| 13 |  I $G(CNT1)>0 S NFOUND=CNT1
 | 
|---|
| 14 |  Q
 | 
|---|
| 15 |  ;
 | 
|---|
| 16 | MAMA(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed finding for
 | 
|---|
| 17 |  ;mammogram abnormal result
 | 
|---|
| 18 |  ;
 | 
|---|
| 19 |  N CNT,CNT1,RESULT,WHDATE
 | 
|---|
| 20 |  S NGET=$S(NGET<0:-NGET,1:NGET)
 | 
|---|
| 21 |  S (CNT1,CNT,NFOUND)=0,DATE=$$NOW^PXRMDATE,TEST(1)=0
 | 
|---|
| 22 |  I $G(BDT)'="",$G(EDT)'="" S WHDATE=BDT_U_EDT
 | 
|---|
| 23 |  D LATEST^WVRPCPR(.RESULT,DFN,"M",$G(WHDATE),$G(NGET),"A")
 | 
|---|
| 24 |  I $D(RESULT)>0 D PROCESS(.RESULT,.CNT1,.TEST,.DATA,.TEXT,NGET,BDT,EDT,NFOUND)
 | 
|---|
| 25 |  I $G(CNT1)>0 S NFOUND=CNT1
 | 
|---|
| 26 |  Q
 | 
|---|
| 27 |  ;
 | 
|---|
| 28 | PAP(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed
 | 
|---|
| 29 |  ;finding for pap smear screening and review
 | 
|---|
| 30 |  ;
 | 
|---|
| 31 |  N CNT,CNT1,RESULT,WHDATE
 | 
|---|
| 32 |  S NGET=$S(NGET<0:-NGET,1:NGET)
 | 
|---|
| 33 |  S (CNT1,CNT,NFOUND)=0,DATE=$$NOW^PXRMDATE,TEST(1)=0
 | 
|---|
| 34 |  I $G(BDT)'="",$G(EDT)'="" S WHDATE=BDT_U_EDT
 | 
|---|
| 35 |  D LATEST^WVRPCPR(.RESULT,DFN,"P",$G(WHDATE),$G(NGET),"*")
 | 
|---|
| 36 |  I $D(RESULT)>0 D PROCESS(.RESULT,.CNT1,.TEST,.DATA,.TEXT,NGET,BDT,EDT,NFOUND)
 | 
|---|
| 37 |  I $G(CNT1)>0 S NFOUND=CNT1
 | 
|---|
| 38 |  Q
 | 
|---|
| 39 |  ;
 | 
|---|
| 40 |  ;
 | 
|---|
| 41 | PAPA(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed finding for
 | 
|---|
| 42 |  ;pap smear abnormal result
 | 
|---|
| 43 |  ;
 | 
|---|
| 44 |  N CNT,CNT1,RESULT,WHDATE
 | 
|---|
| 45 |  S NGET=$S(NGET<0:-NGET,1:NGET)
 | 
|---|
| 46 |  S (CNT1,CNT,NFOUND)=0,DATE=$$NOW^PXRMDATE,TEST(1)=0
 | 
|---|
| 47 |  I $G(BDT)'="",$G(EDT)'="" S WHDATE=BDT_U_EDT
 | 
|---|
| 48 |  D LATEST^WVRPCPR(.RESULT,DFN,"P",$G(WHDATE),$G(NGET),"A")
 | 
|---|
| 49 |  I $D(RESULT)>0 D PROCESS(.RESULT,.CNT1,.TEST,.DATA,.TEXT,NGET,BDT,EDT,NFOUND)
 | 
|---|
| 50 |  I $G(CNT1)>0 S NFOUND=CNT1
 | 
|---|
| 51 |  Q
 | 
|---|
| 52 |  ;
 | 
|---|
| 53 |  ;
 | 
|---|
| 54 | PROCESS(RESULT,CNT1,TEST,DATA,TEXT,NGET,BDT,EDT,NFOUND) ;
 | 
|---|
| 55 |  ;Pieces out data in Result for Reminder evaluation
 | 
|---|
| 56 |  N DATE1
 | 
|---|
| 57 |  I $P($G(RESULT(0)),U)<0 Q
 | 
|---|
| 58 |  F  S CNT=$O(RESULT(CNT)) Q:CNT=""!(CNT1>$G(NGET))  I CNT'=0 D
 | 
|---|
| 59 |  . S DATE1=$P($G(RESULT(CNT)),U,3)
 | 
|---|
| 60 |  . I $G(BDT)'="",$G(EDT)'="",EDT<BDT Q
 | 
|---|
| 61 |  . S CNT1=CNT1+1
 | 
|---|
| 62 |  . S TEST(CNT1)=0
 | 
|---|
| 63 |  . S DATA(CNT1,"LINK")=$P($G(RESULT(CNT)),U,7)
 | 
|---|
| 64 |  . S DATA(CNT1,"STATUS")=$P($G(RESULT(CNT)),U,8)
 | 
|---|
| 65 |  . S DATA(CNT1,"VALUE")=$P($G(RESULT(CNT)),U,5)
 | 
|---|
| 66 |  . S DATA(CNT1,"WVIEN")=$P($G(RESULT(CNT)),U)
 | 
|---|
| 67 |  . S TEST(CNT1)=1,DATE(CNT1)=$G(DATE1)
 | 
|---|
| 68 |  . S TEXT(CNT1)=$P($G(RESULT(CNT)),U,4)_" "_$P($G(RESULT(CNT)),U,6)
 | 
|---|
| 69 |  . ;S VALUE(CNT1)=$P($G(RESULT(CNT)),U,5)
 | 
|---|
| 70 |  Q
 | 
|---|
| 71 |  ;
 | 
|---|
| 72 | PAPSCR(DFN,NGET,BDT,EDT,NFOUND,TEST,DATE,DATA,TEXT) ;Computed finding for
 | 
|---|
| 73 |  ;pap smear screening and f/u
 | 
|---|
| 74 |  ;
 | 
|---|
| 75 |  N CNT,CNT1,CNT2,DATE1,DS,EDTT,IND,JND,MOR,MORIEN,NODE,OD
 | 
|---|
| 76 |  N PXRMWVT,PXRMWVM
 | 
|---|
| 77 |  N SDIR,SNOWCNT,TDATA,TDATE,TOP,TTEST,TTEXT,SNOWTOP,NODE,WVPAP
 | 
|---|
| 78 |  N DAS,DAS0,DAS1,DAS2,DAS3,DAS4,DAS5
 | 
|---|
| 79 |  S NFOUND=0
 | 
|---|
| 80 |  S WVPAP=$O(^WV(790.2,"B","PAP SMEAR",""))
 | 
|---|
| 81 |  S SNOWCNT=0,CNT=0
 | 
|---|
| 82 |  ;Get SNOMED Morphology codes from file 790.2
 | 
|---|
| 83 |  F  S SNOWCNT=$O(^WV(790.2,WVPAP,1,SNOWCNT)) Q:+SNOWCNT'>0  D
 | 
|---|
| 84 |  .S PXRMWVM($P($G(^WV(790.2,WVPAP,1,SNOWCNT,0)),U))=$P($G(^WV(790.2,WVPAP,1,SNOWCNT,0)),U,2)
 | 
|---|
| 85 |  ;
 | 
|---|
| 86 |  ;Get SNOMED Topography codes from file 790.2
 | 
|---|
| 87 |  S SNOWCNT=0 F  S SNOWCNT=$O(^WV(790.2,WVPAP,2,SNOWCNT)) Q:+SNOWCNT'>0  D
 | 
|---|
| 88 |  .S PXRMWVT($P($G(^WV(790.2,WVPAP,2,SNOWCNT,0)),U))=""
 | 
|---|
| 89 |  ;
 | 
|---|
| 90 |  ;If no topography codes quit
 | 
|---|
| 91 |  I $D(PXRMWVT)'>0 S DATA(1,"VALUE")="NO TOPOGRAPHY CODES FOUND",TEST(1)=0,TEXT(1)="     " Q
 | 
|---|
| 92 |  ;
 | 
|---|
| 93 |  ;Handle search direction and date ranges
 | 
|---|
| 94 |  S EDTT=$S(EDT[".":EDT+.0000001,1:EDT+.240001)
 | 
|---|
| 95 |  S SDIR=$S(NGET<0:+1,1:-1)
 | 
|---|
| 96 |  S DS=$S(SDIR=+1:BDT-.000001,1:EDTT)
 | 
|---|
| 97 |  S NGET=$S(NGET<0:-NGET,1:NGET)
 | 
|---|
| 98 |  ;
 | 
|---|
| 99 |  ;Match Topography codes in PXRMINDX for Lab
 | 
|---|
| 100 |  N DTARRAY,NODE1,TCNT,ODATE1
 | 
|---|
| 101 |  S TOP=0,CNT1=0,TCNT=0,ODATE1=0 F  S TOP=$O(PXRMWVT(TOP)) Q:+TOP'>0!(CNT1=NGET)  D
 | 
|---|
| 102 |  .S SNOWTOP="A;O;"_TOP,DATE1=DS
 | 
|---|
| 103 |  .F  S DATE1=+$O(^PXRMINDX(63,"PI",DFN,SNOWTOP,DATE1),SDIR) Q:$S(DATE1'>0:1,DATE1<BDT:1,DATE1>EDTT:1,1:0)  D
 | 
|---|
| 104 |  ..S DAS=$O(^PXRMINDX(63,"PI",DFN,SNOWTOP,DATE1,""))
 | 
|---|
| 105 |  ..;
 | 
|---|
| 106 |  ..;set date to dtarray to hanle multiple snomed done on the same date
 | 
|---|
| 107 |  ..S DTARRAY(DATE1)=$S($D(DTARRAY(DATE1)):DTARRAY(DATE1)+1,1:1)
 | 
|---|
| 108 |  ..S DTARRAY(DATE1,DTARRAY(DATE1))=TOP_U_DAS
 | 
|---|
| 109 |  ;
 | 
|---|
| 110 |  ;loop through date array
 | 
|---|
| 111 |  N DAS
 | 
|---|
| 112 |  S DATE1=DS F  S DATE1=$O(DTARRAY(DATE1),SDIR) Q:$S(DATE1'>0:1,CNT1=NGET:1,1:0)  D
 | 
|---|
| 113 |  .S TCNT=0,CNT1=CNT1+1 F  S TCNT=$O(DTARRAY(DATE1,TCNT)) Q:TCNT'>0  D
 | 
|---|
| 114 |  ..S NODE1=$G(DTARRAY(DATE1,TCNT))
 | 
|---|
| 115 |  ..S TDATE(CNT1)=DATE1,NODE=$G(^LAB(61,$P(NODE1,U),0)),DAS=$P(NODE1,U,2)
 | 
|---|
| 116 |  ..S TTEST(CNT1)=0
 | 
|---|
| 117 |  ..;
 | 
|---|
| 118 |  ..;set TDATA to value
 | 
|---|
| 119 |  ..S TDATA(CNT1,"SNOMED",TCNT,"VALUE")="T-"_$P(NODE,U,2)_" "_$P(NODE,U)
 | 
|---|
| 120 |  ..I '$D(TTEXT(CNT1)) S TTEXT(CNT1)=TDATA(CNT1,"SNOMED",TCNT,"VALUE")_" - "
 | 
|---|
| 121 |  ..E  I $L(TTEXT(CNT1))+$L(TDATA(CNT1,"SNOMED",TCNT,"VALUE"))<255 D
 | 
|---|
| 122 |  ...I $E(TTEXT(CNT1),$L(TTEXT(CNT1)))="\" S TTEXT(CNT1)=TTEXT(CNT1)_TDATA(CNT1,"SNOMED",TCNT,"VALUE")_" - "
 | 
|---|
| 123 |  ..S TDATA(CNT1,"SNOMED",TCNT,"TOPH")="T-"_$P(NODE,U,2)
 | 
|---|
| 124 |  ..;
 | 
|---|
| 125 |  ..;Dig down into Lab file to find a match for morphology codes
 | 
|---|
| 126 |  ..S SNOWCNT=0,DAS0=$P($G(DAS),";"),DAS1=$P($G(DAS),";",3)
 | 
|---|
| 127 |  ..S DAS2=$P(DAS,";",4),DAS3=$P(DAS,";",5)
 | 
|---|
| 128 |  ..S CNT2=0,NODE=""
 | 
|---|
| 129 |  ..;
 | 
|---|
| 130 |  ..;get Morphology results
 | 
|---|
| 131 |  ..N MCNT S MCNT=0
 | 
|---|
| 132 |  ..S TDATA(CNT1,"UNSATISFACTORY")="F"
 | 
|---|
| 133 |  ..F  S SNOWCNT=$O(^LR(DAS0,"CY",DAS1,DAS2,DAS3,2,SNOWCNT)) Q:+SNOWCNT'>0  D
 | 
|---|
| 134 |  ...S MORIEN=^LR(DAS0,"CY",DAS1,DAS2,DAS3,2,SNOWCNT,0)
 | 
|---|
| 135 |  ...I $D(PXRMWVM(MORIEN))>0 D
 | 
|---|
| 136 |  ....S TTEST(CNT1)=1,MCNT=MCNT+1
 | 
|---|
| 137 |  ....;
 | 
|---|
| 138 |  ....;handle multiple SNOMED entries for the same date
 | 
|---|
| 139 |  ....S NODE=^LAB(61.1,MORIEN,0)
 | 
|---|
| 140 |  ....N STR
 | 
|---|
| 141 |  ....I '$D(TTEXT(CNT1))  S TTEXT(CNT1)="M-"_$P(NODE,U,2)_" "_$P(NODE,U)
 | 
|---|
| 142 |  ....E  D
 | 
|---|
| 143 |  .....S STR="M-"_$P(NODE,U,2)_" "_$P(NODE,U)
 | 
|---|
| 144 |  .....I $L(TTEXT(CNT1))+STR'<255 Q
 | 
|---|
| 145 |  .....S TTEXT(CNT1)=TTEXT(CNT1)_STR_";"
 | 
|---|
| 146 |  ....;
 | 
|---|
| 147 |  ....S TDATA(CNT1,"SNOMED",TCNT,MCNT,"MORP")="M-"_$P(NODE,U,2)
 | 
|---|
| 148 |  ....S TDATA(CNT1,"SNOMED",TCNT,MCNT,"RESULT STATUS")=$S(PXRMWVM(MORIEN)="0":"NEM",PXRMWVM(MORIEN)="1":"Abnormal",PXRMWVM(MORIEN)="2":"Unsatisfactory",1:"Unknown")
 | 
|---|
| 149 |  ....I TDATA(CNT1,"SNOMED",TCNT,MCNT,"RESULT STATUS")["Un" S TDATA(CNT1,"UNSATISFACTORY")="T"
 | 
|---|
| 150 |  ....I $L(TTEXT(CNT1))+$L("\\")<255 S TTEXT(CNT1)=TTEXT(CNT1)_"\\"
 | 
|---|
| 151 |  S NFOUND=CNT1
 | 
|---|
| 152 |  N DATE1,CNT,TCNT
 | 
|---|
| 153 |  F IND=1:1:NFOUND S OD(TDATE(IND),IND)=""
 | 
|---|
| 154 |  S CNT1=0,IND=""
 | 
|---|
| 155 |  F  S IND=$O(OD(IND),SDIR) Q:IND=""  D
 | 
|---|
| 156 |  . S JND=0
 | 
|---|
| 157 |  . F  S JND=$O(OD(IND,JND)) Q:JND=""  D
 | 
|---|
| 158 |  .. S CNT1=CNT1+1
 | 
|---|
| 159 |  .. S DATE(CNT1)=IND
 | 
|---|
| 160 |  .. S TEST(CNT1)=TTEST(JND)
 | 
|---|
| 161 |  .. M DATA(CNT1)=TDATA(JND)
 | 
|---|
| 162 |  .. S TEXT(CNT1)=TTEXT(JND)
 | 
|---|
| 163 |  Q
 | 
|---|
| 164 |  ;
 | 
|---|