Home   Package List   Routine Alphabetical List   Global Alphabetical List   FileMan Files List   FileMan Sub-Files List   Package Component Lists   Package-Namespace Mapping  
Routine: BTIUMED3

BTIUMED3.m

Go to the documentation of this file.
  1. BTIUMED3 ; SLC/JM - Active/Recent Med Objects Routine ;30-Jul-2010 09:07;MGH
  1. ;;1.0;TEXT INTEGRATION UTILITIES;**1006**;Jun 20, 1997
  1. ;Object for last class medications
  1. Q
  1. LIST(DFN,BTIUMED,TARGET,CNT) ; EP
  1. ;
  1. ;
  1. ;
  1. ;Required Parameters:
  1. ;
  1. ; DFN Patient identifier
  1. ; BTIUMED The drug class to search
  1. ;
  1. ; TARGET Where the medication data will be stored
  1. ; CNT The number to return
  1. ;
  1. ;
  1. N NEXTLINE,EMPTY,INDEX,NODE,ISINP,KEEPMED,STATUS,OK,RXNO,CHRONIC,LDATE,CANDATE,EXDATE,DETAILED
  1. N INPTYPE,OUTPTYPE,TYPE,MEDTYPE,DATA,DATA1,MED,IDATE,XSTR,LLEN,DAYS,ACTVONLY,ONELIST,REASON,REFILLS
  1. N LASTMEDT,LASTSTS,COUNT,TOTAL,SPACE60,DASH73,TEMP,LINE,TAB,HEADER,CLASSORT,COUNTER,EVENT,HIEN,IEN
  1. N DRUGCLAS,DRUGIDX,LASTCLAS,OLDTAB,OLDHEADR,UNKNOWNS,INDIC,LSTINDIC,IDX,ID,CLININC
  1. N %,%H,STOP,LSTFD,ARRAY ;Clean up after external calls...
  1. S (NEXTLINE,TAB,HEADER,UNKNOWNS,CLININC)=0,LLEN=47
  1. K @TARGET,^TMP("PS",$J),ARRAY
  1. S ISINP=($G(^DPT(DFN,.1))'="") ; Is this an inpatient?
  1. I ISINP S INPTYPE=1,OUTPTYPE=2
  1. E S INPTYPE=2,OUTPTYPE=1
  1. ;
  1. ; *** Scan medication data and skip unwanted meds ***
  1. ;
  1. S DAYS=180,ACTVONLY=0,ONELIST=0,DETAILED=1
  1. I '$D(CNT)=CNT=1
  1. D OCL^PSOORRL(DFN,$$FMADD^XLFDT(DT,-DAYS),"")
  1. S INDEX=0
  1. F S INDEX=$O(^TMP("PS",$J,INDEX)) Q:INDEX'>0 D
  1. .S NODE=$G(^TMP("PS",$J,INDEX,0))
  1. .S CHRONIC=""
  1. .S STATUS=$P(NODE,U,9)
  1. .S IDATE=$P(NODE,U,15)
  1. .S KEEPMED=($L($P(NODE,U,2))>0) ;Discard Blank Meds
  1. .I $P($P(NODE,U),";",2)["O" D
  1. ..S RXNO=+($P(NODE,U,1))
  1. ..S CHRONIC=$P($G(^PSRX(RXNO,9999999)),U,2)
  1. ..I STATUS="EXPIRED" D
  1. ...N X1,X2,X
  1. ...I CHRONIC S X1=DT,X2=-120 D C^%DTC S LDATE=X
  1. ...E S X1=DT,X2=-14 D C^%DTC S LDATE=X
  1. ...S EXDATE=$P($G(^PSRX(RXNO,2)),U,6)
  1. ...I EXDATE>LDATE S KEEPMED=1
  1. ..I STATUS="DISCONTINUED" D
  1. ...S X1=DT,X2=-30 D C^%DTC S LDATE=X
  1. ...S CANDATE=$P($G(^PSRX(RXNO,3)),U,5)
  1. ...I CANDATE>LDATE S KEEPMED=1
  1. .I STATUS="PENDING" D
  1. ..S IEN=+($P(NODE,U))
  1. ..I IEN>0 S REFILLS=$P($G(^PS(52.41,IEN,0)),U,11)
  1. ..S $P(^TMP("PS",$J,INDEX,0),U,5)=REFILLS
  1. .S TYPE=$P($P(NODE,U),";",2)
  1. .S TYPE=$S(TYPE="O":"OP",TYPE="I":"UD",1:"")
  1. .S KEEPMED=(TYPE'="")
  1. .I KEEPMED D
  1. ..I $O(^TMP("PS",$J,INDEX,"A",0))>0 S TYPE="IV"
  1. ..E I $O(^TMP("PS",$J,INDEX,"B",0))>0 S TYPE="IV"
  1. ..I TYPE="OP" S MEDTYPE=OUTPTYPE
  1. ..E S MEDTYPE=INPTYPE
  1. ..I MEDTYPE=INPTYPE S KEEPMED=ISINP
  1. ..E S KEEPMED='ISINP
  1. .S DRUGCLAS=" "
  1. .S MED=$P(NODE,U,2)
  1. .I KEEPMED D
  1. ..S DRUGIDX=$O(^PSDRUG("B",MED,0))
  1. ..D GETCLASS(BTIUMED)
  1. ..I BTIUMED'=DRUGCLAS S KEEPMED=0
  1. ..I KEEPMED D
  1. ...N ORDIDX,TMPCLASS,CDONE,SDONE,TMPIDX,TMPNODE,ISSUPPLY
  1. ...S ID=$P(NODE,U)
  1. ...S IDX=+ID,ID=$E(ID,$L(IDX)+1,$L(ID))
  1. ...S (DRUGIDX,ORDIDX)=0
  1. ...I ID="R;O" S DRUGIDX=+$P($G(^PSRX(IDX,0)),U,6)
  1. ...I ID="P;O" S DRUGIDX=+$P($G(^PS(52.41,IDX,0)),U,9)
  1. ...I ID="P;I" D
  1. ....I $P($G(^PS(53.1,IDX,1,0)),U,4)=1 D
  1. .....S TMPIDX=$O(^PS(53.1,IDX,1,0)) I +TMPIDX S DRUGIDX=$P($G(^PS(53.1,IDX,1,TMPIDX,0)),U)
  1. ...I ID="U;I" D
  1. ....I $P($G(^PS(55,DFN,5,IDX,1,0)),U,4)=1 D
  1. .....S TMPIDX=$O(^PS(55,DFN,5,IDX,1,0)) I +TMPIDX S DRUGIDX=$P($G(^PS(55,DFN,5,IDX,1,TMPIDX,0)),U)
  1. ...I ID="V;I" D
  1. ....I $P($G(^PS(55,DFN,"IV",IDX,"AD",0)),U,4)=1 D
  1. .....S TMPIDX=$O(^PS(55,DFN,"IV",IDX,"AD",0)) I +TMPIDX D
  1. ......S TMPIDX=$P($G(^PS(55,DFN,"IV",IDX,"AD",TMPIDX,0)),U)
  1. ......I +TMPIDX S DRUGIDX=$P($G(^PS(52.6,TMPIDX,0)),U,2)
  1. .; *** Save wanted meds in "B" temp xref, removing duplicates ***
  1. .;
  1. .I KEEPMED D
  1. ..S EVENT=$P(NODE,U,15)
  1. ..I EVENT="" S EVENT=$$NOW^XLFDT
  1. ..S IDATE=9999999-EVENT
  1. ..S ARRAY(IDATE,INDEX)=DRUGIDX_"^"_IDX_"^"_ID_"^"_EVENT_"^"_STATUS
  1. ;
  1. ; *** Check for empty condition ***
  1. ;
  1. ;after you get all the drugs into the array take number requested
  1. S $P(SPACE60," ",60)=" ",$P(DASH73,"=",73)="="
  1. S COUNTER=0,LINE=0
  1. S TEMP="Last "_CNT_" drugs from class "_BTIUMED
  1. D ADD^BTIUMED1(TEMP)
  1. N I
  1. S I="" F S I=$O(ARRAY(I)) Q:I=""!(COUNTER>=CNT) D
  1. .S INDEX="" F S INDEX=$O(ARRAY(I,INDEX)) Q:INDEX="" D
  1. ..S COUNTER=COUNTER+1
  1. ..S NODE=^TMP("PS",$J,INDEX,0)
  1. ..S DATA=$G(ARRAY(I,INDEX))
  1. ..S STATUS=$P(DATA,U,5)
  1. ..I STATUS="HOLD" D
  1. ...S HIEN=+($P(NODE,U))
  1. ...S REASON=$$GET1^DIQ(52,HIEN,99,"E")
  1. ...S NODE=NODE_U_REASON
  1. ..D ADDMED^BTIUMED1(0)
  1. I COUNTER=0 S LINE=LINE+1 S @TARGET@(LINE,0)="No Meds for this class found"
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. LISTX K ^TMP("PS",$J)
  1. Q "~@"_$NA(@TARGET)
  1. ;
  1. GETCLASS(BTIUMED) ; Get Drug Class, filter out supplies
  1. I +DRUGIDX D
  1. .N TEMPNODE
  1. .S TEMPNODE=$G(^PSDRUG(DRUGIDX,0))
  1. .S DRUGCLAS=$P(TEMPNODE,U,2)
  1. Q