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

ORAM2.m

Go to the documentation of this file.
  1. ORAM2 ;POR/RSF - ANTICOAGULATION MANAGEMENT RPCS (3 of 4) ; 1/17/18 6:41pm
  1. ;;3.0;ORDER ENTRY/RESULTS REPORTING;**307,339,354,361,391,459,451**;Dec 17, 1997;Build 8
  1. ;;Per VHA Directive 6402, this routine should not be modified
  1. Q
  1. ;
  1. ; External References:
  1. ; $$GET1^DIQ ICR #2056
  1. ; $$SETSTR^VALM1 ICR #10116
  1. ; $$FMADD/$$FMDIFF/$$FMTE/$$NOW^XLFDT ICR #10103
  1. ; $$TITLE/$$UP^XLFSTR ICR #10104
  1. ; $$GET^XPAR ICR #2263
  1. ; ^AUTNPOV( ICR #1593
  1. ;
  1. ALLGOAL(RESULT,DAYS,CLINIC) ; last inr for all pts seen in last x days
  1. ;;RPC = ORAM2 ALLGOAL
  1. N ORAMDFN,ORAMNOW,ORAMCUT,ORAMCNT,ORAMPC,ORAMGOOD,ORAMBAD,ORAMBL
  1. S ORAMDFN=0,ORAMCNT=0,ORAMGOOD=0,ORAMBAD=0
  1. S ORAMNOW=$$NOW^XLFDT
  1. S ORAMCUT=$$FMADD^XLFDT(ORAMNOW,-DAYS)
  1. F S ORAMDFN=$O(^ORAM(103,ORAMDFN)) Q:'ORAMDFN D
  1. . N ORAMFS,ORAM3D0,ORAMDATE,ORAMCLIN
  1. . S ORAMFS=$O(^ORAM(103,ORAMDFN,3," "),-1) Q:$G(ORAMFS)=""
  1. . S ORAMCLIN=$P($G(^ORAM(103,ORAMDFN,6)),U,2)
  1. . I +$G(CLINIC),(ORAMCLIN'=CLINIC) Q
  1. . S ORAM3D0=$G(^ORAM(103,ORAMDFN,3,ORAMFS,0)),ORAMDATE=$P(ORAM3D0,"^")
  1. . I ($G(ORAMDATE)>$G(ORAMCUT)) D
  1. .. N ORAMINR,ORAMGOAL,ORAMGLO,ORAMGHI
  1. .. S ORAMINR=$P(ORAM3D0,"^",3),ORAMGOAL=$P(ORAM3D0,"^",12),ORAMGLO=$P(ORAMGOAL,"-"),ORAMGHI=$P(ORAMGOAL,"-",2) S:ORAMGHI[" " ORAMGHI=$P(ORAMGHI," ",2)
  1. .. S ORAMGLO=ORAMGLO-(.1*ORAMGLO),ORAMGHI=ORAMGHI+(.1*ORAMGHI)
  1. .. S ORAMCNT=ORAMCNT+1
  1. .. I (ORAMINR'<ORAMGLO)&(ORAMINR'>ORAMGHI) S ORAMGOOD=ORAMGOOD+1
  1. .. E D
  1. ... N ORAMNAME,ORAMSSN,LINE
  1. ... S ORAMBAD=ORAMBAD+1,LINE=""
  1. ... S ORAMNAME=$P($P(^DPT(ORAMDFN,0),"^"),","),ORAMSSN=$E($P(^DPT(ORAMDFN,0),"^",9),6,9)
  1. ... S LINE=$$SETSTR^VALM1(ORAMNAME,LINE,1,15)
  1. ... S LINE=$$SETSTR^VALM1("("_ORAMSSN_")",LINE,17,6)
  1. ... S LINE=$$SETSTR^VALM1($S(+ORAMINR>0:ORAMINR,1:"N/A"),LINE,25,5)
  1. ... S LINE=$$SETSTR^VALM1("("_ORAMGOAL_")",LINE,32,9)
  1. ... S RESULT(ORAMBAD)=LINE
  1. I ORAMCNT>0 S ORAMPC=$J(((ORAMGOOD/ORAMCNT)*100),3,1)
  1. I ORAMBAD'="" S ORAMBL=$L(ORAMBAD,"^"),$P(ORAMBAD,"^",1)=ORAMBL
  1. S RESULT(0)=$G(ORAMPC)
  1. Q
  1. ;
  1. PTAPPT(RESULT,CLINIC) ; Counts # of pts/day next 45 days
  1. ;RPC=ORAM2 PTAPPT
  1. N ORAMFDT,ORAMRDT,ORAMCNT
  1. S ORAMFDT=$$FMADD^XLFDT(DT,45)_".2359",ORAMRDT=DT
  1. F S ORAMRDT=$O(^ORAM(103,"L",ORAMRDT)) Q:(+ORAMRDT'>0)!(ORAMRDT>ORAMFDT) D
  1. . N ORAMDT,ORAMRD,ORAMDFN
  1. . S ORAMDT=$P(ORAMRDT,"."),ORAMRD=$$FMTE^XLFDT(ORAMDT,"2DF"),ORAMDFN=0
  1. . F S ORAMDFN=$O(^ORAM(103,"L",ORAMRDT,ORAMDFN)) Q:'ORAMDFN D
  1. .. N ORAMCLIN S ORAMCLIN=$P($G(^ORAM(103,ORAMDFN,6)),U,2)
  1. .. Q:ORAMCLIN'=$G(CLINIC)
  1. .. S ORAMCNT(ORAMDT)=+$G(ORAMCNT(ORAMDT))+1
  1. .. S RESULT(ORAMDT)=ORAMRD_" - "_$G(ORAMCNT(ORAMDT))
  1. PTAPPTQ Q
  1. ;
  1. NOACT(RESULT,DAYS,CLINIC) ; Finds pts w/o AC activity past X days
  1. ;RPC=ORAM2 NOACT
  1. N ORAMDT,ORAMFDT,ORAMVST,ORAMDFN,ORAMPT,ORAMSSN,ORAMSORT,ORAMC,ORAMI,ORAMMIS,ORAMLAST,ORAMFS,ORMISVST,ORAMCLIN,ORAMDONE,ORAMFSTA
  1. S ORAMDT=$$NOW^XLFDT,ORAMFDT=$$FMADD^XLFDT(ORAMDT,-DAYS),ORAMDFN=0
  1. F S ORAMDFN=$O(^ORAM(103,ORAMDFN)) Q:+ORAMDFN'>0 D
  1. . S ORAMFS=" ",ORAMLAST=0,ORAMMIS=0,ORAMCLIN=$P($G(^ORAM(103,ORAMDFN,6)),U,2),ORAMDONE=0
  1. . Q:(ORAMCLIN'=$G(CLINIC))!(2=$$GET1^DIQ(103,ORAMDFN,15,"I"))
  1. . F S ORAMFS=$O(^ORAM(103,ORAMDFN,3,ORAMFS),-1) Q:(ORAMFS']"")!ORAMDONE D
  1. .. I '$G(ORAMMIS)&$$MISSED(ORAMDFN,ORAMFS) S ORAMMIS=ORAMFS Q
  1. .. I '$G(ORAMLAST)&'$$MISSED(ORAMDFN,ORAMFS) S ORAMLAST=ORAMFS,ORAMDONE=1
  1. . Q:($$GET1^DIQ(103.011,ORAMLAST_","_ORAMDFN,.01,"I")'<ORAMFDT)
  1. . F ORAMFS="ORAMMIS","ORAMLAST" D
  1. .. K ORMISVST,ORAMFSTA
  1. .. I (ORAMFS="ORAMMIS") S ORMISVST=$$GET1^DIQ(103.011,@ORAMFS_","_ORAMDFN,80,"I"),ORAMFSTA=1
  1. .. Q:(ORAMFS="ORAMMIS")&($G(ORMISVST)'>ORAMFDT)
  1. .. S ORAMFS=@ORAMFS
  1. .. Q:'ORAMFS
  1. .. N LINE S LINE=""
  1. .. S ORAMPT=$P(^DPT(ORAMDFN,0),"^"),ORAMPT=$P(ORAMPT,","),ORAMSSN=$E($P(^DPT(ORAMDFN,0),"^",9),6,9)
  1. .. S ORAMVST=$P(^ORAM(103,ORAMDFN,3,ORAMFS,0),"^")
  1. .. I $G(ORMISVST) S ORAMVST=ORMISVST
  1. .. S LINE=$$SETSTR^VALM1(ORAMPT,LINE,1,15)
  1. .. S LINE=$$SETSTR^VALM1("("_ORAMSSN_")",LINE,17,6)
  1. .. S LINE=$$SETSTR^VALM1($S($G(ORAMFSTA):"Missed Ap: ",1:"Last Seen: ")_$$FMTE^XLFDT($P(ORAMVST,"."),"2DF"),LINE,25,19)
  1. .. S ORAMSORT($P(ORAMVST,"."),ORAMPT_ORAMSSN)=LINE
  1. S (ORAMC,ORAMI)=0
  1. F S ORAMI=$O(ORAMSORT(ORAMI)) Q:+ORAMI'>0 D
  1. . N ORAMJ S ORAMJ=""
  1. . F S ORAMJ=$O(ORAMSORT(ORAMI,ORAMJ)) Q:ORAMJ']"" D
  1. .. S ORAMC=ORAMC+1,RESULT(ORAMC)=$G(ORAMSORT(ORAMI,ORAMJ))
  1. I ORAMC=0 S RESULT(0)="No patients lost to follow-up "_DAYS_" days or longer."
  1. NOACTQ Q
  1. ;
  1. MISSED(DFN,FS) ;*354 Added
  1. ;Input DFN -> Patient IEN
  1. ; FS -> FlowSheet IEN
  1. ;Output 1 if this flowsheet entry was a missed appt.
  1. ; 0 if this flowsheet entry was not a missed appt.
  1. ;
  1. N ORAMCM,IENS,I,RSLT
  1. Q:'$G(DFN)!'$G(FS) 0
  1. S IENS=FS_","_DFN_",",(I,RSLT)=0
  1. I $$GET1^DIQ(103.011,IENS,99,"","ORAMCM")="" Q RSLT
  1. F S I=$O(ORAMCM(I)) Q:'I!RSLT I ORAMCM(I)["Missed Appt; return:" S RSLT=1
  1. Q RSLT
  1. ;
  1. SHOWRATE(RESULT,DFN) ; CALCULATES SHOWRATE
  1. ;;RPC=ORAM2 NOSHOW
  1. N ORAMFSDT,ORAMFS,ORAMR,ORAMARR,ORAMPC,ORAMSD0,ORAMRDT,ORAMRDT0
  1. S ORAMR=0,ORAMSD0=0,ORAMRDT0=""
  1. S ORAMFSDT=0 F S ORAMFSDT=$O(^ORAM(103,DFN,3,"B",ORAMFSDT)) Q:'ORAMFSDT D
  1. . S ORAMFS=0 F S ORAMFS=$O(^ORAM(103,DFN,3,"B",ORAMFSDT,ORAMFS)) Q:'ORAMFS D
  1. .. N ORAMD0,ORAMSD,ORAMSCR,ORAMPTT,ORAMLCNT,ORAMLLN,ORAMDIFF,FLAG
  1. .. S ORAMD0=$G(^ORAM(103,DFN,3,ORAMFS,0)),ORAMSCR=$P(ORAMD0,"^",13),ORAMSD=$P($P(ORAMD0,"^"),"."),ORAMPTT=$P(ORAMD0,"^",3)
  1. .. S ORAMLCNT=$P($G(^ORAM(103,DFN,3,ORAMFS,1,0)),"^",3) Q:'ORAMLCNT
  1. .. S ORAMLLN=$G(^ORAM(103,DFN,3,ORAMFS,1,ORAMLCNT,0))
  1. .. S ORAMRDT=""
  1. .. S FLAG=$S($G(ORAMLLN)["Next draw:":"N",$G(ORAMLLN)["Callback:":"C",$G(ORAMLLN)["Missed Appt;":"M",1:"Q")
  1. .. I FLAG="Q",ORAMLCNT>1 D ;last comment was maybe split in two lines
  1. ... S ORAMLLN=$G(^ORAM(103,DFN,3,ORAMFS,1,ORAMLCNT-1,0))_ORAMLLN ;concatenate last two lines. Various types of splits in data.
  1. ... S FLAG=$S($G(ORAMLLN)["Next draw:":"N",$G(ORAMLLN)["Callback:":"C",$G(ORAMLLN)["Missed Appt;":"M",1:"Q")
  1. .. Q:FLAG="Q" ;either malformed or deleted entry
  1. .. I FLAG="N" S ORAMRDT=$P($G(ORAMLLN)," ",3)
  1. .. ;I ORAMRDT="E" S ORAMLCNT=ORAMLCNT-1,ORAMLLN=$G(^ORAM(103,DFN,3,ORAMFS,1,ORAMLCNT,0)) this case is handled by concatenation above
  1. .. ;I S ORAMRDT=$S($G(ORAMLLN)["Next draw:":$P($G(ORAMLLN)," ",3),$G(ORAMLLN)["Callback:":$P($G(ORAMLLN)," ",2),$G(ORAMLLN)["Missed Appt;":"Q",1:$P($G(ORAMLLN)," "))
  1. .. I FLAG="M" S ORAMRDT=$P($G(ORAMLLN)," ",4),ORAMR=ORAMR+1 D DT^DILF("T",ORAMRDT,.ORAMRDT) S ORAMRDT0=ORAMRDT Q ;NOTE PT MISSED DRAW, ADD ONE TO DENOMINATOR
  1. .. I $L(ORAMRDT)>1 D DT^DILF("T",ORAMRDT,.ORAMRDT) ;this probably only works for N flag
  1. .. I FLAG="C" S ORAMRDT=$P($G(ORAMLLN)," ",2) D DT^DILF("T",ORAMRDT,.ORAMRDT) S ORAMRDT=$$FMADD^XLFDT(ORAMRDT,-1)
  1. .. I ($G(ORAMSD0)=$G(ORAMSD)) S ORAMRDT0=ORAMRDT Q ;skip if second appt of the day.
  1. .. S ORAMSD0=ORAMSD
  1. .. I 'ORAMPTT S ORAMRDT0=ORAMRDT Q ;skip if no INR.
  1. .. I ORAMRDT0'="" S ORAMDIFF=$$FMDIFF^XLFDT(ORAMSD,ORAMRDT0,2) S ORAMR=ORAMR+1 I ORAMDIFF<172801 S ORAMARR(0)=$G(ORAMARR(0))+1
  1. .. S ORAMRDT0=ORAMRDT
  1. I ORAMR>0 S ORAMPC=($G(ORAMARR(0))/ORAMR)*100,ORAMPC=$E(ORAMPC,1,4)
  1. S RESULT=$G(ORAMPC)_"^"_$G(ORAMR)
  1. Q
  1. ;
  1. RPTSTART(ROOT,DFN,ID,ALPHA,OMEGA,DTRANGE,REMOTE,MAX,ORFHIE) ;
  1. ;;
  1. D START^ORWRP(80,"RPT^ORAM2(.ROOT,.DFN,.ID,.ALPHA,.OMEGA,.DTRANGE,.REMOTE,.MAX,.ORFHIE)",999)
  1. Q
  1. ;
  1. RPT(ROOT,DFN,ID,ALPHA,OMEGA,DTRANGE,REMOTE,MAX,ORFHIE) ; Generate report for CPRS
  1. D RPT^ORAMX1(.ROOT,$G(DFN),$G(ID),$G(ALPHA),$G(OMEGA),$G(DTRANGE),$G(REMOTE),$G(MAX),$G(ORFHIE))
  1. Q
  1. ;
  1. DTCHK(DFN,ALPHA,OMEGA,ORAMFSD) ; CHECKS DATE RANGE WITH ALPHA AND OMEGA FROM CPRS
  1. N ORAMFDT,ORAMVAL
  1. S ORAMVAL=0
  1. S ORAMFDT=$P(^ORAM(103,DFN,3,ORAMFSD,0),"^")
  1. S:ORAMFDT'<ALPHA ORAMVAL=1
  1. S:ORAMFDT>OMEGA ORAMVAL=0
  1. Q ORAMVAL
  1. ;
  1. TEAMCHK(RESULT,ORAMTMS) ; SET-UP VERIFY NAMES
  1. ;RPC=ORAM2 TEAM CHECK
  1. N ORAMSKIP,ORAMI,ORAMERR
  1. Q:$G(ORAMTMS)=""
  1. F ORAMI=1:1:20 S ORAMSKIP=$G(ORAMSKIP)_" "
  1. S ORAMERR=0
  1. F ORAMI=1:1:$L(ORAMTMS,"^") D
  1. . N ORAMN
  1. . I $P(ORAMTMS,"^",ORAMI)'="" S ORAMN=$P(ORAMTMS,"^",ORAMI) D
  1. .. S RESULT(ORAMI)=ORAMN_$E(ORAMSKIP,1,(20-$L(ORAMN)))
  1. .. I $D(^OR(100.21,ORAMN)) S RESULT(ORAMI)=RESULT(ORAMI)_$P(^OR(100.21,ORAMN,0),"^")
  1. .. E S RESULT(ORAMI)=RESULT(ORAMI)_"clinic not found.",ORAMERR=$G(ORAMERR)+1
  1. S RESULT(0)=$G(ORAMERR)
  1. Q
  1. ;
  1. REMIND(RESULT,ORAMDFN,ORAMDT,ORAMREM) ; RPC=ORAM2 REMINDER
  1. N ORAMRML,ORAMDAY,ORAMR,D0,DA,DIK,X
  1. Q:'+$G(ORAMDFN) Q:$G(ORAMDT)="" Q:$G(ORAMREM)=""
  1. S RESULT=0
  1. D NOW^%DTC S ORAMDAY=X D DT^DILF(,ORAMDT,.X) S ORAMDT=X
  1. S $P(^ORAM(103,ORAMDFN,0),"^",18)=$G(ORAMDT)
  1. K ^ORAM(103,ORAMDFN,5)
  1. S ORAMRML=$L(ORAMREM,"^"),^ORAM(103,ORAMDFN,5,0)="^^"_ORAMRML_"^"_ORAMRML_"^"_ORAMDAY_"^"
  1. F ORAMR=1:1:ORAMRML D
  1. . S ^ORAM(103,ORAMDFN,5,ORAMR,0)=$P(ORAMREM,"^",ORAMR)
  1. S DIK="^ORAM(103,",DA=ORAMDFN
  1. D IX^DIK
  1. S RESULT=1
  1. Q
  1. ;