PXRMDLLB ;SLC/PJH - REMINDER DIALOG LOADER ;07/29/2004 ;;2.0;CLINICAL REMINDERS;;Feb 04, 2005 ; CODE(DFIEN,DFTYP,ARRAY) ; N ARY,CNT,CNT1 I DFTYP["ICD9" S CODE=$P($G(^ICD9(DFIEN,0)),U) D PERIOD^ICDAPIU(CODE,.ARY) I DFTYP["ICPT" S CODE=$P($$CPT^ICPTCOD(DFIEN),U,2) D PERIOD^ICPTAPIU(CODE,.ARY) I $D(ARY)'>0 Q I $P($G(ARY(0)),U,2)'>0 Q S (CNT,CNT1)=0 F S CNT=$O(ARY(CNT)) Q:CNT="" D . S ARRAY(CNT1)=CODE_":"_CNT_":"_$P($G(ARY(CNT)),U) . S CNT1=CNT1+1 Q ; CODES(FILE,TXIEN,ARRAY) ;Return selectable codes from taxonomy file N CNT,CODE,CSCNT,DATA,DATES,DISPLAY,IEN,INSTALL,TEMP,TEXT,NODE,SUB S SUB=0,CNT=0,NODE=$S(FILE=80:"SDX",FILE=81:"SPR") F S SUB=$O(^PXD(811.2,TXIEN,NODE,SUB)) Q:'SUB D .S DATA=$G(^PXD(811.2,TXIEN,NODE,SUB,0)) Q:DATA="" .;Ignore if disabled .S DISPLAY="" .I $P(DATA,U,3)=1 Q .;Get ien of code .S IEN=$P(DATA,U) Q:IEN="" .;get date ranges and text from period api .K ARY .I FILE=80 S CODE=$P($G(^ICD9(IEN,0)),U) .I FILE=81 S CODE=$P($$CPT^ICPTCOD(IEN),U,2) .S DISPLAY=$P($G(DATA),U,2) .S TEMP=$$CODE^PXRMVAL(CODE,FILE) Q:'$P(TEMP,U) Q:$P(TEMP,U,9)=1 .;Set display text from taxonomy selectable code text .S TEXT=$P(DATA,U,2) .;otherwise use icd9/cpt description .I TEXT="",FILE=80 S TEXT=$P($$ICDDX^ICDCODE(IEN),U,3) .I TEXT="",FILE=81 S TEXT=$P($$CPT^ICPTCOD(IEN),U,3) .I FILE=80 D PERIOD^ICDAPIU(CODE,.ARY) .I FILE=81 D PERIOD^ICPTAPIU(CODE,.ARY) .I $D(ARY)'>0 Q .I $P($G(ARY(0)),U,2)'>0 Q .S CSCNT=0 F S CSCNT=$O(ARY(CSCNT)) Q:CSCNT="" D ..S DATES=":"_CSCNT_":"_$P($G(ARY(CSCNT)),U) ..S TEXT=$P($G(ARY(CSCNT)),U,2) I $G(DISPLAY)'="" S TEXT=DISPLAY ..S CNT=CNT+1,ARRAY(CNT)=IEN_U_$G(CODE)_$G(DATES)_U_$G(TEXT) Q ; EXP(TIEN,DCUR,DTTYP) ;Expand taxonomy codes N CODES,CNT,FILE,LIT,CAT S FILE=$S(DTTYP="POV":80,DTTYP="CPT":81,1:"") Q:'FILE S LIT="Selectable "_$S(FILE=80:"Diagnoses:",1:"Procedures:") S CAT=$P($G(^PXD(811.2,TIEN,0)),U) ; S OCNT=OCNT+1 S ORY(OCNT)=3_U_DITEM_U_U_DTTYP_U_U_U_U_U_CAT_U_LIT ;Get selectable codes D CODES(FILE,TIEN,.CODES) S CNT=0 ;Save selectable codes as type 5 records F S CNT=$O(CODES(CNT)) Q:'CNT D .S OCNT=OCNT+1,ORY(OCNT)=5_U_DITEM_U_U_DTTYP_U_U_CODES(CNT) Q ; ;Pass MST code as a forced value MST(DFTYP,DFIEN) ; ;Validate finding ien Q:DFIEN="" ;For each MST term check if finding is mapped N FOUND,TCOND,TIEN,TNAM,TSUB S FOUND=0 F TNAM="POSITIVE","NEGATIVE","DECLINES" D Q:FOUND .;Get term IEN .S TIEN=$O(^PXRMD(811.5,"B","MST "_TNAM_" REPORT","")) Q:'TIEN .;Check if finding is mapped to term .Q:'$D(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN)) .;If exam and term condition logic is null ignore .I DFTYP="AUTTEXAM(" D Q:TCOND="" ..S TCOND="",TSUB=$O(^PXRMD(811.5,TIEN,20,"E",DFTYP,DFIEN,"")) Q:'TSUB ..S TCOND=$P($G(^PXRMD(811.5,TIEN,20,TSUB,3)),U) .;If it is then create additional prompt for MST .N DSEQ,DEXC,DDEF,DGUI,DTYP,DTEXT,DSNL,DREQ .;Add to end of array .S DSEQ=$O(ARRAY(""),-1)+1 .;Null fields .S DDEF="",DEXC="",DTEXT="",DSNL="",DREQ="" .;MST status (exept for exams) .I DFTYP'="AUTTEXAM(" S DDEF=$$STCODE^PXRMMST("MST "_TNAM_" REPORT") .;GUI process and forced value .S DGUI="MST",DTYP="F" .;Save in array .S ARRAY(DSEQ)=DGUI_U_DEXC_U_DDEF_U_DTYP_U_DTEXT_U_DSNL_U_DREQ .;Quit after the first term is found .S FOUND=1 Q ; REPLACE(DFN,TERMNODE,DITEM,DATA,TERMSTAT) ; ;this section is use to compare the term evalution result against ;the value store in the Reminder Term Status field. ;If the value match and the replacement item is active then the orginal ;item will be replace with the new item. N TERMOUT S TERMSTAT=1 I +$P(TERMNODE,U),$P($G(TERMNODE),U,2)'="" D Q:+TERMSTAT=0 .N DITEMO .S TERMOUT=$$TERM($P(TERMNODE,U),DFN,$G(DITEM)) .I TERMOUT'=$P(TERMNODE,U,2) Q .I +$P(TERMNODE,U,3)'>0 S TERMSTAT=0 Q .S DITEMO=DITEM,DITEM=$P(TERMNODE,U,3),DATA=$G(^PXRMD(801.41,DITEM,0)) .I $G(DATA)=""!($P(DATA,U,3)]"") S DITEM=DITEMO Q Q ; TERM(TERMIEN,DFN,IEN) ; ;this section is use to for the term evaluation N ARRAY,CNT,NODE,RESULT,TERMARR N DATEORDR,ESUB,FINDPA,FIEVAL,TFIEVAL,NOCC,BDT,EDT,SDIR,SUB,WVIEN S (TERMARR,TFIEVAL,DATEORDR,FIEVAL)="" ;build term array D TERM^PXRMLDR(TERMIEN,.TERMARR) ;term evaulation D IEVALTER^PXRMTERM(DFN,.TERMARR,.TERMARR,1,.FIEVAL) S RESULT=$G(FIEVAL(1)) ;if the item is one of the WH review reminders build finding item and ;text from the the WVALERTS API in PXRMCWH I RESULT=1,$P($G(^PXRMD(801.41,IEN,0)),U,16)["WHR" D .N IDENT .S IDENT=$P($G(^PXRMD(801.41,IEN,0)),U,16) .I $G(FIEVAL(1,"LINK"))=1,$G(FIEVAL(1,"STATUS"))="OPEN",$G(FIEVAL(1,"VALUE"))="Pending" D ..S WVIEN=$G(FIEVAL(1,"WVIEN")) ..;DBIA #4102 ..D RESULTS^WVALERTS(.ARRAY,WVIEN) D ...K WHFIND,WHNAME ...S NODE=$G(ARRAY(0)) I +$P(NODE,U)'>0 Q ...S WHFIND=WVIEN_";WV(790.1,",WHNAME=$P($G(NODE),U,3) ...S (ESUB,SUB)=0 F S SUB=$O(DTXT(SUB)) Q:SUB'>0 S ESUB=SUB ...S ESUB=ESUB+1 ...I IDENT="WHRP" D ....N MOD ....S DATE="" ....S DTXT(ESUB)=$P($G(NODE),U,3),ESUB=ESUB+1 ....S DATE=$P($G(NODE),U,4),STR=$$RJ^XLFSTR("Collected: ",20) ....S STR=STR_$P($G(NODE),U,8) ....S DTXT(ESUB)=STR,ESUB=ESUB+1 ....S STR=$$RJ^XLFSTR("Lab Accession #: ",20),STR=STR_$P($G(NODE),U,9) ....S DTXT(ESUB)=STR,ESUB=ESUB+1 ....S STR=$$RJ^XLFSTR("Specimen: ",20),STR=STR_$P($G(NODE),U,10) ....S DTXT(ESUB)=STR ...I IDENT="WHRM" D ....S STR=$$RJ^XLFSTR("Procedure: ",20),STR=STR_$P($G(NODE),U,5) ....S DTXT(ESUB)=STR,ESUB=ESUB+1 ....S STR=$$RJ^XLFSTR("Primary Diagnosis: ",20),STR=STR_$P($G(NODE),U,6) ....S DTXT(ESUB)=STR,ESUB=ESUB+1 ....S STR=$$RJ^XLFSTR("Modifiers: ",20),MOD=$P($G(NODE),U,7) ....I $G(MOD)="" S STR=STR_"" ....E S STR=STR_$P($G(MOD),"~",1) ....S DTXT(ESUB)=STR,ESUB=ESUB+1 ....I $P($G(MOD),"~",2)'="" S DTXT(ESUB)=$$LJ^XLFSTR($P(MOD,"~",2),23) Q +RESULT ;