| 1 | PXRMDLLB ;SLC/PJH - REMINDER DIALOG LOADER ;05/01/2007 | 
|---|
| 2 | ;;2.0;CLINICAL REMINDERS;**6**;Feb 04, 2005;Build 123 | 
|---|
| 3 | ; | 
|---|
| 4 | CODE(DFIEN,DFTYP,ARRAY) ; | 
|---|
| 5 | N ARY,CNT,CNT1 | 
|---|
| 6 | I DFTYP["ICD9" S CODE=$P($G(^ICD9(DFIEN,0)),U) D PERIOD^ICDAPIU(CODE,.ARY) | 
|---|
| 7 | I DFTYP["ICPT" S CODE=$P($$CPT^ICPTCOD(DFIEN),U,2) D PERIOD^ICPTAPIU(CODE,.ARY) | 
|---|
| 8 | I $D(ARY)'>0 Q | 
|---|
| 9 | I $P($G(ARY(0)),U,2)'>0 Q | 
|---|
| 10 | S (CNT,CNT1)=0 | 
|---|
| 11 | F  S CNT=$O(ARY(CNT)) Q:CNT=""  D | 
|---|
| 12 | . S ARRAY(CNT1)=CODE_":"_CNT_":"_$P($G(ARY(CNT)),U) | 
|---|
| 13 | . S CNT1=CNT1+1 | 
|---|
| 14 | Q | 
|---|
| 15 | ; | 
|---|
| 16 | CODES(FILE,TXIEN,ARRAY) ;Return selectable codes from taxonomy file | 
|---|
| 17 | N CNT,CODE,CSCNT,DATA,DATES,DISPLAY,IEN,INSTALL,TEMP,TEXT,NODE,SUB | 
|---|
| 18 | S SUB=0,CNT=0,NODE=$S(FILE=80:"SDX",FILE=81:"SPR") | 
|---|
| 19 | F  S SUB=$O(^PXD(811.2,TXIEN,NODE,SUB)) Q:'SUB  D | 
|---|
| 20 | .S DATA=$G(^PXD(811.2,TXIEN,NODE,SUB,0)) Q:DATA="" | 
|---|
| 21 | .;Ignore if disabled | 
|---|
| 22 | .S DISPLAY="" | 
|---|
| 23 | .I $P(DATA,U,3)=1 Q | 
|---|
| 24 | .;Get ien of code | 
|---|
| 25 | .S IEN=$P(DATA,U) Q:IEN="" | 
|---|
| 26 | .;get date ranges and text from period api | 
|---|
| 27 | .K ARY | 
|---|
| 28 | .I FILE=80 S CODE=$P($G(^ICD9(IEN,0)),U) | 
|---|
| 29 | .I FILE=81 S CODE=$P($$CPT^ICPTCOD(IEN),U,2) | 
|---|
| 30 | .S DISPLAY=$P($G(DATA),U,2) | 
|---|
| 31 | .S TEMP=$$CODE^PXRMVAL(CODE,FILE) Q:'$P(TEMP,U)  Q:$P(TEMP,U,9)=1 | 
|---|
| 32 | .;Set display text from taxonomy selectable code text | 
|---|
| 33 | .S TEXT=$P(DATA,U,2) | 
|---|
| 34 | .;otherwise use icd9/cpt description | 
|---|
| 35 | .I TEXT="",FILE=80 S TEXT=$P($$ICDDX^ICDCODE(IEN),U,3) | 
|---|
| 36 | .I TEXT="",FILE=81 S TEXT=$P($$CPT^ICPTCOD(IEN),U,3) | 
|---|
| 37 | .I FILE=80 D PERIOD^ICDAPIU(CODE,.ARY) | 
|---|
| 38 | .I FILE=81 D PERIOD^ICPTAPIU(CODE,.ARY) | 
|---|
| 39 | .I $D(ARY)'>0 Q | 
|---|
| 40 | .I $P($G(ARY(0)),U,2)'>0 Q | 
|---|
| 41 | .S CSCNT=0 F  S CSCNT=$O(ARY(CSCNT)) Q:CSCNT=""  D | 
|---|
| 42 | ..S DATES=":"_CSCNT_":"_$P($G(ARY(CSCNT)),U) | 
|---|
| 43 | ..S TEXT=$P($G(ARY(CSCNT)),U,2) I $G(DISPLAY)'="" S TEXT=DISPLAY | 
|---|
| 44 | ..S CNT=CNT+1,ARRAY(CNT)=IEN_U_$G(CODE)_$G(DATES)_U_$G(TEXT) | 
|---|
| 45 | Q | 
|---|
| 46 | ; | 
|---|
| 47 | EXP(TIEN,DCUR,DTTYP) ;Expand taxonomy codes | 
|---|
| 48 | N CODES,CNT,FILE,LIT,CAT | 
|---|
| 49 | S FILE=$S(DTTYP="POV":80,DTTYP="CPT":81,1:"") Q:'FILE | 
|---|
| 50 | S LIT="Selectable "_$S(FILE=80:"Diagnoses:",1:"Procedures:") | 
|---|
| 51 | S CAT=$P($G(^PXD(811.2,TIEN,0)),U) | 
|---|
| 52 | ; | 
|---|
| 53 | S OCNT=OCNT+1 | 
|---|
| 54 | S ORY(OCNT)=3_U_DITEM_U_U_DTTYP_U_U_U_U_U_CAT_U_LIT | 
|---|
| 55 | ;Get selectable codes | 
|---|
| 56 | D CODES(FILE,TIEN,.CODES) | 
|---|
| 57 | S CNT=0 | 
|---|
| 58 | ;Save selectable codes as type 5 records | 
|---|
| 59 | F  S CNT=$O(CODES(CNT)) Q:'CNT  D | 
|---|
| 60 | .S OCNT=OCNT+1,ORY(OCNT)=5_U_DITEM_U_U_DTTYP_U_U_CODES(CNT) | 
|---|
| 61 | Q | 
|---|
| 62 | ; | 
|---|
| 63 | ;Pass MST code as a forced value | 
|---|
| 64 | MST(DFTYP,DFIEN) ; | 
|---|
| 65 | ;Validate finding ien | 
|---|
| 66 | Q:DFIEN="" | 
|---|
| 67 | ;For each MST term check if finding is mapped | 
|---|
| 68 | N FOUND,TCOND,TIEN,TNAM,TSUB | 
|---|
| 69 | S FOUND=0 | 
|---|
| 70 | F TNAM="POSITIVE","NEGATIVE","DECLINES" D  Q:FOUND | 
|---|
| 71 | .;Get term IEN | 
|---|
| 72 | .S TIEN=$O(^PXRMD(811.5,"B","MST "_TNAM_" REPORT","")) Q:'TIEN | 
|---|
| 73 | .;Check if finding is mapped to term | 
|---|
| 74 | .Q:'$D(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN)) | 
|---|
| 75 | .;If exam and term condition logic is null ignore | 
|---|
| 76 | .I DFTYP="AUTTEXAM(" D  Q:TCOND="" | 
|---|
| 77 | ..S TCOND="",TSUB=$O(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN,"")) Q:'TSUB | 
|---|
| 78 | ..S TCOND=$P($G(^PXRMD(811.5,TIEN,20,TSUB,3)),U) | 
|---|
| 79 | .;If it is then create additional prompt for MST | 
|---|
| 80 | .N DSEQ,DEXC,DDEF,DGUI,DTYP,DTEXT,DSNL,DREQ | 
|---|
| 81 | .;Add to end of array | 
|---|
| 82 | .S DSEQ=$O(ARRAY(""),-1)+1 | 
|---|
| 83 | .;Null fields | 
|---|
| 84 | .S DDEF="",DEXC="",DTEXT="",DSNL="",DREQ="" | 
|---|
| 85 | .;MST status (exept for exams) | 
|---|
| 86 | .I DFTYP'="AUTTEXAM(" S DDEF=$$STCODE^PXRMMST("MST "_TNAM_" REPORT") | 
|---|
| 87 | .;GUI process and forced value | 
|---|
| 88 | .S DGUI="MST",DTYP="F" | 
|---|
| 89 | .;Save in array | 
|---|
| 90 | .S ARRAY(DSEQ)=DGUI_U_DEXC_U_DDEF_U_DTYP_U_DTEXT_U_DSNL_U_DREQ | 
|---|
| 91 | .;Quit after the first term is found | 
|---|
| 92 | .S FOUND=1 | 
|---|
| 93 | Q | 
|---|
| 94 | ; | 
|---|
| 95 | REPLACE(DFN,TERMNODE,DITEM,DATA,TERMSTAT) ; | 
|---|
| 96 | ;this section is use to compare the term evalution result against | 
|---|
| 97 | ;the value store in the Reminder Term Status field. | 
|---|
| 98 | ;If the value match and the replacement item is active then the orginal | 
|---|
| 99 | ;item will be replace with the new item. | 
|---|
| 100 | N TERMOUT | 
|---|
| 101 | S TERMSTAT=1 I +$P(TERMNODE,U),$P($G(TERMNODE),U,2)'="" D  Q:+TERMSTAT=0 | 
|---|
| 102 | .N DITEMO | 
|---|
| 103 | .S TERMOUT=$$TERM($P(TERMNODE,U),DFN,$G(DITEM)) | 
|---|
| 104 | .I TERMOUT'=$P(TERMNODE,U,2) Q | 
|---|
| 105 | .I +$P(TERMNODE,U,3)'>0 S TERMSTAT=0 Q | 
|---|
| 106 | .S DITEMO=DITEM,DITEM=$P(TERMNODE,U,3),DATA=$G(^PXRMD(801.41,DITEM,0)) | 
|---|
| 107 | .I $G(DATA)=""!($P(DATA,U,3)]"") S DITEM=DITEMO Q | 
|---|
| 108 | Q | 
|---|
| 109 | ; | 
|---|
| 110 | RESGROUP(DIEN) ; | 
|---|
| 111 | N CNT,RESULT,TEMP | 
|---|
| 112 | S RESULT="" | 
|---|
| 113 | I $$PATCH^XPDUTL("OR*3.0*243")=0 D  Q RESULT | 
|---|
| 114 | .S RESULT=$P($G(^PXRMD(801.41,DIEN,51,1,0)),U) I RESULT="" Q | 
|---|
| 115 | .I $P($G(^PXRMD(801.41,RESULT,0)),U,3)'="" S RESULT="" Q | 
|---|
| 116 | S CNT=0 F  S CNT=$O(^PXRMD(801.41,DIEN,51,CNT)) Q:CNT'>0  D | 
|---|
| 117 | .S TEMP=$P($G(^PXRMD(801.41,DIEN,51,CNT,0)),U) I TEMP="" Q | 
|---|
| 118 | .I $P($G(^PXRMD(801.41,TEMP,0)),U,3)'="" S TEMP="" Q | 
|---|
| 119 | .S RESULT=$S(RESULT="":TEMP,1:RESULT_"~"_TEMP) | 
|---|
| 120 | Q RESULT | 
|---|
| 121 | ; | 
|---|
| 122 | TERM(TERMIEN,DFN,IEN) ; | 
|---|
| 123 | ;this section is use to for the term evaluation | 
|---|
| 124 | N ARRAY,CNT,NODE,RESULT,TERMARR | 
|---|
| 125 | N DATEORDR,ESUB,FINDPA,FIEVAL,TFIEVAL,NOCC,BDT,EDT,SDIR,SUB,WVIEN | 
|---|
| 126 | S (TERMARR,TFIEVAL,DATEORDR,FIEVAL)="" | 
|---|
| 127 | ;build term array | 
|---|
| 128 | D TERM^PXRMLDR(TERMIEN,.TERMARR) | 
|---|
| 129 | ;term evaulation | 
|---|
| 130 | D IEVALTER^PXRMTERM(DFN,.TERMARR,.TERMARR,1,.FIEVAL) | 
|---|
| 131 | S RESULT=$G(FIEVAL(1)) | 
|---|
| 132 | ;if the item is one of the WH review reminders build finding item and | 
|---|
| 133 | ;text from the  the WVALERTS API in PXRMCWH | 
|---|
| 134 | I RESULT=1,$P($G(^PXRMD(801.41,IEN,0)),U,16)["WHR" D | 
|---|
| 135 | .N IDENT | 
|---|
| 136 | .S IDENT=$P($G(^PXRMD(801.41,IEN,0)),U,16) | 
|---|
| 137 | .I $G(FIEVAL(1,"LINK"))=1,$G(FIEVAL(1,"STATUS"))="OPEN",$G(FIEVAL(1,"VALUE"))="Pending" D | 
|---|
| 138 | ..S WVIEN=$G(FIEVAL(1,"WVIEN")) | 
|---|
| 139 | ..;DBIA #4102 | 
|---|
| 140 | ..D RESULTS^WVALERTS(.ARRAY,WVIEN) D | 
|---|
| 141 | ...K WHFIND,WHNAME | 
|---|
| 142 | ...S NODE=$G(ARRAY(0)) I +$P(NODE,U)'>0 Q | 
|---|
| 143 | ...S WHFIND=WVIEN_";WV(790.1,",WHNAME=$P($G(NODE),U,3) | 
|---|
| 144 | ...S (ESUB,SUB)=0 F  S SUB=$O(DTXT(SUB)) Q:SUB'>0  S ESUB=SUB | 
|---|
| 145 | ...S ESUB=ESUB+1 | 
|---|
| 146 | ...I IDENT="WHRP" D | 
|---|
| 147 | ....N MOD | 
|---|
| 148 | ....S DATE="" | 
|---|
| 149 | ....S DTXT(ESUB)=$P($G(NODE),U,3),ESUB=ESUB+1 | 
|---|
| 150 | ....S DATE=$P($G(NODE),U,4),STR=$$RJ^XLFSTR("Collected: ",20) | 
|---|
| 151 | ....S STR=STR_$P($G(NODE),U,8) | 
|---|
| 152 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1 | 
|---|
| 153 | ....S STR=$$RJ^XLFSTR("Lab Accession #: ",20),STR=STR_$P($G(NODE),U,9) | 
|---|
| 154 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1 | 
|---|
| 155 | ....S STR=$$RJ^XLFSTR("Specimen: ",20),STR=STR_$P($G(NODE),U,10) | 
|---|
| 156 | ....S DTXT(ESUB)=STR | 
|---|
| 157 | ...I IDENT="WHRM" D | 
|---|
| 158 | ....S STR=$$RJ^XLFSTR("Procedure: ",20),STR=STR_$P($G(NODE),U,5) | 
|---|
| 159 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1 | 
|---|
| 160 | ....S STR=$$RJ^XLFSTR("Primary Diagnosis: ",20),STR=STR_$P($G(NODE),U,6) | 
|---|
| 161 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1 | 
|---|
| 162 | ....S STR=$$RJ^XLFSTR("Modifiers: ",20),MOD=$P($G(NODE),U,7) | 
|---|
| 163 | ....I $G(MOD)="" S STR=STR_"<none>" | 
|---|
| 164 | ....E  S STR=STR_$P($G(MOD),"~",1) | 
|---|
| 165 | ....S DTXT(ESUB)=STR,ESUB=ESUB+1 | 
|---|
| 166 | ....I $P($G(MOD),"~",2)'="" S DTXT(ESUB)=$$LJ^XLFSTR($P(MOD,"~",2),23) | 
|---|
| 167 | Q +RESULT | 
|---|
| 168 | ; | 
|---|