| 1 | PXRMXX1 ; SLC/PJH - Build list of reminder findings;08/03/2005
 | 
|---|
| 2 |  ;;2.0;CLINICAL REMINDERS;**4**;Feb 04, 2005;Build 21
 | 
|---|
| 3 |  ;
 | 
|---|
| 4 |  ;Called at REM, REPORT and PSMERG from PXRMXX
 | 
|---|
| 5 |  ;
 | 
|---|
| 6 |  ;Merge the patients found by the pharmacy API
 | 
|---|
| 7 |  ;--------------------------------------------
 | 
|---|
| 8 | PSMERG(TYP,NODE,SEARCH) ;
 | 
|---|
| 9 |  N DATA,DATE,DCNT,DFN,DRUG,DSUP,FCNT,FINDING,FIEN,FLD,FTYP,FREC,FUNIQ
 | 
|---|
| 10 |  N LAST,LDATE,NEXT,RDATE,SDATE,STOPDATE,TERM,TIEN,VTYP
 | 
|---|
| 11 |  ;
 | 
|---|
| 12 |  S DFN="",VTYP=$S(TYP="PXRMPSI":"I",1:"O")
 | 
|---|
| 13 |  F  S DFN=$O(^TMP(TYP_NODE,$J,DFN)) Q:'DFN  D
 | 
|---|
| 14 |  .;Get last entry for this patient created by reminder evaluation
 | 
|---|
| 15 |  .S LAST=$O(^TMP(NODE,$J,DFN,"FIND",""),-1),NEXT=LAST+1,DCNT=0
 | 
|---|
| 16 |  .;If this is a new patient update patient and finding count
 | 
|---|
| 17 |  .I NEXT=1 S PXRMFCNT=PXRMFCNT+1,PXRMCNT=PXRMCNT+1
 | 
|---|
| 18 |  .;Scan through medications found for this patient 
 | 
|---|
| 19 |  .F  S DCNT=$O(^TMP(TYP_NODE,$J,DFN,DCNT)) Q:'DCNT  D
 | 
|---|
| 20 |  ..;Move data fields into FIEVAL format
 | 
|---|
| 21 |  ..S FINDING=$P($G(^TMP(TYP_NODE,$J,DFN,DCNT,0)),U) Q:FINDING=""
 | 
|---|
| 22 |  ..S DATA=$G(^TMP(TYP_NODE,$J,DFN,DCNT,1)),DATE=$P(DATA,U)
 | 
|---|
| 23 |  ..S RDATE=$P(DATA,U,2),DRUG=$P(DATA,U,3),DSUP=$P(DATA,U,4)
 | 
|---|
| 24 |  ..;Stop date
 | 
|---|
| 25 |  ..S STOPDATE=$P(DATA,U,5)
 | 
|---|
| 26 |  ..I +STOPDATE S DSUP=$$FMDIFF^XLFDT(STOPDATE,DATE,"")
 | 
|---|
| 27 |  ..;Determine finding item/type
 | 
|---|
| 28 |  ..S FTYPE=$P(FINDING,";",2),FIEN=$P(FINDING,";") Q:FIEN=""  Q:FTYPE=""
 | 
|---|
| 29 |  ..;Create file entry for each term
 | 
|---|
| 30 |  ..S TIEN=""
 | 
|---|
| 31 |  ..F  S TIEN=$O(SEARCH(FTYPE,FIEN,TIEN)) Q:TIEN=""  D
 | 
|---|
| 32 |  ...F FLD="FINDING","DATE","RDATE","DRUG","DSUP","STOPDATE" D
 | 
|---|
| 33 |  ....S ^TMP(NODE,$J,DFN,"FIND",NEXT,FLD)=@FLD
 | 
|---|
| 34 |  ...;Get term name (no transforms)
 | 
|---|
| 35 |  ...S ^TMP(NODE,$J,DFN,"FIND",NEXT,"TERM")=$P($G(^PXRMD(811.5,TIEN,0)),U)
 | 
|---|
| 36 |  ...;Update header
 | 
|---|
| 37 |  ...S ^TMP(NODE,$J,DFN,"FIND",NEXT)=DATE_U_VTYP
 | 
|---|
| 38 |  ...;Update finding header
 | 
|---|
| 39 |  ...S LDATE=$P($G(^TMP(NODE,$J,DFN)),U)
 | 
|---|
| 40 |  ...I DATE>LDATE S ^TMP(NODE,$J,DFN)=DATE_U_VTYP
 | 
|---|
| 41 |  ...;Save count by finding for report
 | 
|---|
| 42 |  ...S FREC=$G(PXRMFIEN(FINDING)),FCNT=$P(FREC,U),FUNIQ=$P(FREC,U,2)
 | 
|---|
| 43 |  ...S FCNT=FCNT+1 I '$G(FUNIQ(FIEN)) S FUNIQ=FUNIQ+1
 | 
|---|
| 44 |  ...S PXRMFIEN(FINDING)=FCNT_U_FUNIQ,FUNIQ(FINDING)=1
 | 
|---|
| 45 |  ...;Update count
 | 
|---|
| 46 |  ...S NEXT=NEXT+1
 | 
|---|
| 47 |  Q
 | 
|---|
| 48 |  ;
 | 
|---|
| 49 |  ;Build list of related findings
 | 
|---|
| 50 |  ;------------------------------
 | 
|---|
| 51 | REM(PXRMITEM,OUTPUT,LAB) ;
 | 
|---|
| 52 |  N COHORT,FTYPE,FIEN,FNODE,TNAM,TIEN
 | 
|---|
| 53 |  S FTYPE=""
 | 
|---|
| 54 |  ;Check if terms findings exist on the reminder
 | 
|---|
| 55 |  F  S FTYPE=$O(^PXD(811.9,PXRMITEM,20,"E",FTYPE)) Q:FTYPE=""  D
 | 
|---|
| 56 |  .;Check terms ONLY
 | 
|---|
| 57 |  .I FTYPE="PXRMD(811.5," D  Q
 | 
|---|
| 58 |  ..N FTYPE S TIEN=""
 | 
|---|
| 59 |  ..;Scan through terms in this reminder
 | 
|---|
| 60 |  ..F  S TIEN=$O(^PXD(811.9,PXRMITEM,20,"E","PXRMD(811.5,",TIEN)) Q:'TIEN  D
 | 
|---|
| 61 |  ...;Get the cohort flag
 | 
|---|
| 62 |  ...S FNODE=$O(^PXD(811.9,PXRMITEM,20,"E","PXRMD(811.5,",TIEN,""))
 | 
|---|
| 63 |  ...S COHORT="",FTYPE=""
 | 
|---|
| 64 |  ...I FNODE S COHORT=$P($G(^PXD(811.9,PXRMITEM,20,FNODE,0)),U,7)
 | 
|---|
| 65 |  ...;Scan through term looking for findings
 | 
|---|
| 66 |  ...F  S FTYPE=$O(^PXRMD(811.5,TIEN,20,"E",FTYPE)) Q:FTYPE=""  D
 | 
|---|
| 67 |  ....;Taxonomy findings
 | 
|---|
| 68 |  ....I FTYPE="PXD(811.2," D RTAX Q
 | 
|---|
| 69 |  ....;If Lab test and not in cohort ignore
 | 
|---|
| 70 |  ....I FTYPE="LAB(60,",COHORT="" D  Q
 | 
|---|
| 71 |  .....;Only applies to lab extract reminder 
 | 
|---|
| 72 |  .....I $G(REM(PXRMITEM))'="VA-NATIONAL EPI LAB EXTRACT" Q
 | 
|---|
| 73 |  .....;Get the term name for this lab test
 | 
|---|
| 74 |  .....S TNAM=$P($G(^PXRMD(811.5,TIEN,0)),U) Q:TNAM=""
 | 
|---|
| 75 |  .....S LAB(TNAM)=TIEN Q
 | 
|---|
| 76 |  ....;Other findings
 | 
|---|
| 77 |  ....D RSET
 | 
|---|
| 78 |  Q
 | 
|---|
| 79 |  ;
 | 
|---|
| 80 |  ;Save report details
 | 
|---|
| 81 |  ;-------------------
 | 
|---|
| 82 | REPORT(NODE) ;
 | 
|---|
| 83 |  N RDATE,CNT,CN1,COUNT,DATA,LAST,OLD,DESC
 | 
|---|
| 84 |  ;format rundate as MMDDYY
 | 
|---|
| 85 |  S RDATE=$$DT^XLFDT,RDATE=$E(RDATE,4,5)_$E(RDATE,6,7)_$E(RDATE,2,3)
 | 
|---|
| 86 |  ;Task Name
 | 
|---|
| 87 |  S DESC="LREPI "_$E(PXRMEDT,2,3)_"/"_$E(PXRMEDT,4,5)_" "_RDATE
 | 
|---|
| 88 |  S DATA=$G(^PXRMXT(810.3,0))
 | 
|---|
| 89 |  ;Find next entry in report file
 | 
|---|
| 90 |  S LAST=$P(DATA,U,3),COUNT=$P(DATA,U,4)+1,CNT=LAST+1
 | 
|---|
| 91 |  S $P(^PXRMXT(810.3,0),U,3)=CNT,$P(^PXRMXT(810.3,0),U,4)=COUNT
 | 
|---|
| 92 |  ;Save Task and extract parameters
 | 
|---|
| 93 |  S ^PXRMXT(810.3,CNT,0)=DESC_U_PXRMBDT_U_PXRMEDT_U_$G(ZTSK)_U_DUZ_U_$$NOW^XLFDT_U_PXRMCNT_U_PXRMFCNT
 | 
|---|
| 94 |  S $P(^PXRMXT(810.3,CNT,50),U)=1
 | 
|---|
| 95 |  S $P(^PXRMXT(810.3,CNT,100),U)="N"
 | 
|---|
| 96 |  ;Transfer findings into report file
 | 
|---|
| 97 |  N DATE,DFN,DRUG,DSUP,ENC,EREC,ETYP,IC,FINDING,RESULT
 | 
|---|
| 98 |  N TERM,ALTTRM,TIEN,TNDBID,VALUE,VIEN
 | 
|---|
| 99 |  S DFN=0,CN1=0
 | 
|---|
| 100 |  F  S DFN=$O(^TMP(NODE,$J,DFN)) Q:'DFN  Q:TSTOP=1  D
 | 
|---|
| 101 |  .;Check if stop task requested
 | 
|---|
| 102 |  .I $$S^%ZTLOAD S TSTOP=1 Q
 | 
|---|
| 103 |  .S ENC=0
 | 
|---|
| 104 |  .F  S ENC=$O(^TMP(NODE,$J,DFN,"FIND",ENC)) Q:'ENC  D
 | 
|---|
| 105 |  ..;DINUM
 | 
|---|
| 106 |  ..S CN1=CN1+1
 | 
|---|
| 107 |  ..;Encounter type
 | 
|---|
| 108 |  ..S ETYP=$P($G(^TMP(NODE,$J,DFN,"FIND",ENC)),U,2)
 | 
|---|
| 109 |  ..;Finding details
 | 
|---|
| 110 |  ..F IC="DATE","FINDING","RESULT","TERM","ALTTRM","VALUE","VIEN" D
 | 
|---|
| 111 |  ...S @IC=$P($G(^TMP(NODE,$J,DFN,"FIND",ENC,IC)),U)
 | 
|---|
| 112 |  ..;Drug details
 | 
|---|
| 113 |  ..F IC="DRUG","DSUP" D
 | 
|---|
| 114 |  ...S @IC=$P($G(^TMP(NODE,$J,DFN,"FIND",ENC,IC)),U)
 | 
|---|
| 115 |  ..;Get the term ien for the original term if a mapping occurred
 | 
|---|
| 116 |  ..S TIEN="",TNDBID=""
 | 
|---|
| 117 |  ..I TERM]"" S TIEN=$O(^PXRMD(811.5,"B",TERM,"")),TNDBID=ALTTRM
 | 
|---|
| 118 |  ..;Save value if the result is null
 | 
|---|
| 119 |  ..I RESULT="" S RESULT=VALUE
 | 
|---|
| 120 |  ..;Save data to file
 | 
|---|
| 121 |  ..S EREC=DFN_U_U_TIEN_U_FINDING_U_TNDBID_U_DATE_U_VIEN_U_ETYP
 | 
|---|
| 122 |  ..S ^PXRMXT(810.3,CNT,1,CN1,0)=EREC
 | 
|---|
| 123 |  ..S EREC=RESULT_U_VALUE_U_DRUG_U_DSUP
 | 
|---|
| 124 |  ..S ^PXRMXT(810.3,CNT,1,CN1,1)=EREC
 | 
|---|
| 125 |  ;
 | 
|---|
| 126 |  ;Set top node for ^DIK re-index
 | 
|---|
| 127 |  S ^PXRMXT(810.3,CNT,1,0)="^810.31A^"_CN1_U_CN1
 | 
|---|
| 128 |  ;
 | 
|---|
| 129 |  ;Write finding totals to report file
 | 
|---|
| 130 |  N FCNT,FUNIQ,FIEN,FFIEN
 | 
|---|
| 131 |  S FIEN="",CN1=0
 | 
|---|
| 132 |  F  S FIEN=$O(PXRMFIEN(FIEN)) Q:FIEN=""  D
 | 
|---|
| 133 |  .S FCNT=+$P(PXRMFIEN(FIEN),U),FUNIQ=+$P(PXRMFIEN(FIEN),U,2)
 | 
|---|
| 134 |  .S FFIEN=FIEN I FFIEN="NO FINDING" S FFIEN=""
 | 
|---|
| 135 |  .S CN1=CN1+1,^PXRMXT(810.3,CNT,2,CN1,0)=FFIEN_U_FCNT_U_FUNIQ
 | 
|---|
| 136 |  ;
 | 
|---|
| 137 |  ;Set top node for ^DIK re-index
 | 
|---|
| 138 |  S ^PXRMXT(810.3,CNT,2,0)="^810.32A^"_CN1_U_CN1
 | 
|---|
| 139 |  ;
 | 
|---|
| 140 |  ;Re-index the file for this batch
 | 
|---|
| 141 |  N DIK,DA
 | 
|---|
| 142 |  S DIK="^PXRMXT(810.3,",DA=CNT
 | 
|---|
| 143 |  D IX1^DIK
 | 
|---|
| 144 |  ;
 | 
|---|
| 145 |  Q
 | 
|---|
| 146 |  ;
 | 
|---|
| 147 |  ;Store finding for term
 | 
|---|
| 148 |  ;----------------------
 | 
|---|
| 149 | RSET N FIEN
 | 
|---|
| 150 |  S FIEN=""
 | 
|---|
| 151 |  F  S FIEN=$O(^PXRMD(811.5,TIEN,20,"E",FTYPE,FIEN)) Q:'FIEN  D
 | 
|---|
| 152 |  .S OUTPUT(FTYPE,FIEN,TIEN)=""
 | 
|---|
| 153 |  Q
 | 
|---|
| 154 |  ;
 | 
|---|
| 155 |  ;Store the taxonomy ICD9 codes
 | 
|---|
| 156 |  ;-----------------------------
 | 
|---|
| 157 | RTAX N FIEN,ISUB,TXIEN
 | 
|---|
| 158 |  S TXIEN=""
 | 
|---|
| 159 |  ;Scan taxonomy section of the term
 | 
|---|
| 160 |  F  S TXIEN=$O(^PXRMD(811.5,TIEN,20,"E",FTYPE,TXIEN)) Q:'TXIEN  D
 | 
|---|
| 161 |  .S ISUB=""
 | 
|---|
| 162 |  .;Extract ICD9 codes from expanded taxonomy file
 | 
|---|
| 163 |  .F  S ISUB=$O(^PXD(811.3,TXIEN,80,ISUB)) Q:'ISUB  D
 | 
|---|
| 164 |  ..S FIEN=$P($G(^PXD(811.3,TXIEN,80,ISUB,0)),U) Q:'FIEN
 | 
|---|
| 165 |  ..S OUTPUT("ICD9(",FIEN,TIEN)=""
 | 
|---|
| 166 |  Q
 | 
|---|