WVRPCGF1 ;ISP/AGP - APIs for Clinical Reminders ;Oct 24, 2023@15:22:45
;;1.0;WOMEN'S HEALTH;**24,26,32**;Sep 30, 1998;Build 7
;
;
ACOPY(REF,OUTPUT) ;Copy all the descendants of the array reference into a linear
;array. REF is the starting array reference, for example A or
;^TMP("PXRM",$J). OUTPUT is the linear array for the output. It
;should be in the form of a closed root, i.e., A() or ^TMP($J,).
;Note OUTPUT cannot be used as the name of the output array.
N DONE,IND,LEN,NL,OROOT,OUT,PROOT,ROOT,START,TEMP
I REF="" Q
S NL=0
S OROOT=$P(OUTPUT,")",1)
S PROOT=$P(REF,")",1)
;Build the root so we can tell when we are done.
S TEMP=$NA(@REF)
S ROOT=$P(TEMP,")",1)
S REF=$Q(@REF)
I REF'[ROOT Q
S DONE=0
F Q:(REF="")!(DONE) D
. S START=$F(REF,ROOT)
. S LEN=$L(REF)
. S IND=$E(REF,START,LEN)
. S NL=NL+1
. S OUT=OROOT_NL_")"
. S @OUT=PROOT_IND_"="_@REF
. S REF=$Q(@REF)
. I REF'[ROOT S DONE=1
Q
;
;build error message array
BLDMSG(PAT,SUBJ,NUM) ;
N CNT,ERR,GROUP,XMDUZ,XMSUB,XMTEXT,Y
K ^TMP("WV MSG",$J),XMY
S GROUP=$$GETMAILG^WVUTL4()
S CNT=0,XMDUZ=DUZ,XMSUB=SUBJ,XMTEXT="^TMP(""WV MSG"",$J,",XMY(DUZ)="",XMY("G."_GROUP)=""
S NUM=NUM+1,^TMP("WV MSG",$J,NUM,0)="Patient DFN: "_PAT
S NUM=NUM+1,^TMP("WV MSG",$J,NUM,0)="ERROR:"
D ACOPY("WVERR","ERR()")
S CNT=0 F S CNT=$O(ERR(CNT)) Q:CNT'>0 S NUM=NUM+1,^TMP("WV MSG",$J,NUM,0)=ERR(CNT)
S NUM=NUM+1,^TMP("WV MSG",$J,NUM,0)=""
S NUM=NUM+1,^TMP("WV MSG",$J,NUM,0)="INPUTS:"
K ERR
D ACOPY("INPUTS","ERR()")
D ^XMD
Q
;
MKWSDEV ;Make the WV WORKSTATION device.
N FDA,FDAIEN,MSG
;Make sure that the device does not get created more than once.
I +$$FIND1^DIC(3.5,"","MX","WV WORKSTATION")>0 Q
S FDA(3.5,"+1,",.01)="WV WORKSTATION" ;NAME
S FDA(3.5,"+1,",.02)="WV Workstation HFS Device" ;LOCATION OF TERMINAL
S FDA(3.5,"+1,",1)="WVWSD.DAT" ;$I
S FDA(3.5,"+1,",1.95)=0 ;SIGN-ON/SYSTEM DEVICE
S FDA(3.5,"+1,",2)="HFS" ;TYPE
S FDA(3.5,"+1,",3)=$$FIND1^DIC(3.2,"","MX","P-OTHER") ;SUBTYPE
S FDA(3.5,"+1,",4)=0 ;ASK DEVICE
S FDA(3.5,"+1,",5)=0 ;ASK PARAMETERS
S FDA(3.5,"+1,",5.1)=0 ;ASK HOST FILE
S FDA(3.5,"+1,",5.2)=0 ;ASK HFS I/O OPERATION
D UPDATE^DIE("","FDA","FDAIEN","MSG")
Q
;
;print api for CPRS view/print RPC
PRINT(RESULT,WVDFN,WVPURPTX) ;
N BY,DIWF
N %ZIS,BY,DC,DHD,DONE,FF,FILENAME,FILESPEC,FLDS,FR,GBL,HFNAME
N IND,IOP,NOW,PATH,VAR,WVPURP,SUCCESS,TO,UNIQN
S WVPURP=$O(^WV(790.404,"B",WVPURPTX,"")) I WVPURP'>0 Q
;D MKWSDEV^PXRMHOST
D MKWSDEV
;Set up the output file before DIP is called.
S PATH=$$PWD^%ZISH
S NOW=$$NOW^XLFDT
S NOW=$TR(NOW,".","")
S UNIQN=$J_NOW
S FILENAME="WVLETTER"_UNIQN_".DAT"
S HFNAME=PATH_FILENAME
S IOP="WV WORKSTATION;80"
S %ZIS("HFSMODE")="W"
S %ZIS("HFSNAME")=HFNAME
S DIWF="^WV(790.404,WVPURP,1,"
S DIWF(1)=790
S BY="INTERNAL(#.01)="_WVDFN
D GADD^WVUTL9(WVDFN) ;get current complete address
D SADD^WVUTL9(WVDFN) ;set complete address in File 790
D KVAR^WVUTL9 ;clean-up VADPT variables used
D EN2^DIWF
S GBL="^TMP(""WVLETTER"",$J,1,0)"
S GBL=$NA(@GBL)
K ^TMP("WVLETTER",$J)
S SUCCESS=$$FTG^%ZISH(PATH,FILENAME,GBL,3)
;Look for a form feed, remove it and all subsequent lines.
S FF=$C(12)
I $G(VAR)["^" D
. S VAR=$NA(@VAR)
. S VAR=$P(VAR,")",1)
. S VAR=VAR_",IND,0)"
. S (DONE,IND)=0
. F Q:DONE S IND=$O(^TMP("WVLETTER",$J,IND)) Q:+IND=0 D
.. I ^TMP("WVLETTER",$J,IND,0)=FF S DONE=1 Q
.. S @VAR=^TMP("WVLETTER",$J,IND,0)
E D
. S (DONE,IND)=0
. F Q:DONE S IND=$O(^TMP("WVLETTER",$J,IND)) Q:+IND=0 D
.. S VAR(IND)=^TMP("WVLETTER",$J,IND,0)
.. I VAR(IND)=FF S DONE=1
S IND=0 F S IND=$O(^TMP("WVLETTER",$J,IND)) Q:IND'>0 D
.S RESULT(IND)=$G(^TMP("WVLETTER",$J,IND,0))
S RESULT(0)=1_U_WVPURPTX_" letter"
K ^TMP("WVLETTER",$J)
;Delete the host file.
S FILESPEC(FILENAME)=""
S SUCCESS=$$DEL^%ZISH(PATH,$NA(FILESPEC))
Q
;
NEXTPROC(DFN,TYPE) ;
N NAME,NODE
I TYPE="BR" S NODE=$P($G(^WV(790,DFN,0)),U,18,19)
I TYPE="CX" S NODE=$P($G(^WV(790,DFN,0)),U,11,12)
I +$P(NODE,U)'>0 Q ""
I +$P(NODE,U,2)'>0 Q ""
I TYPE="BR" S NAME=$P($G(^WV(790.51,$P(NODE,U),0)),U)
I TYPE="CX" S NAME=$P($G(^WV(790.5,$P(NODE,U),0)),U)
I NAME="" Q ""
Q NAME_U_$P(NODE,U,2)
;
VIEWDATA(RESULT,DATA,PAT,FINDVAL) ;
;FINDINGS("WOMEN'S HEALTH",FILE,CNT)=SUBSCRIPT_U_VALUE_U_PROMPT TYPE IEN_U_PROMPT SUBSCRIPT
N CNT,PKG,FILE,NODE,SUB,VALUE
S PKG="WOMEN'S HEALTH"
I '$D(DATA(PKG,790.4)),'$D(DATA(PKG,790.1)) Q
I $D(DATA(PKG,790.4)) D V7904(.RESULT,.DATA,PAT,FINDVAL)
I $D(DATA(PKG,790.1)) D V7901(.RESULT,.DATA,PAT,FINDVAL)
Q
;
V7904(RESULT,DATA,PAT,FINDVAL) ;
N INC,NODE,PKG,SUB,SUB1,VALUE
S PKG="WOMEN'S HEALTH"
S INC=0 F S INC=$O(DATA(PKG,790.4,INC)) Q:INC'>0 D
.S NODE=$G(DATA(PKG,790.4,INC))
.S SUB=$P(NODE,U),VALUE=$P(NODE,U,2),SUB1=$P(NODE,U,4)
.I SUB=".04" D PRINT^WVRPCGF1(.RESULT,PAT,VALUE) Q
.;I SUB="No Notifications" D
.;.S RESULT(0)=0_U_"Procedure(s) with no documented notification"
.;.D FNDWDATA^PXRMRPCG(.RESULT,PAT,IEN,FINDVAL,VALUE)
Q
;
V7901(RESULT,DATA,PAT,FINDVAL) ;
N CNT,DIR,DIAG,I,INC,NODE,PKG,SUB,SUB1,TCNT,TEXT,VALUE,X
S PKG="WOMEN'S HEALTH"
S INC=0 F S INC=$O(DATA(PKG,790.1,INC)) Q:INC'>0 D
.S NODE=$G(DATA(PKG,790.1,INC))
.S SUB=$P(NODE,U),VALUE=$P(NODE,U,2),SUB1=$P(NODE,U,4)
.I SUB="LAST THREE TRMTS" D Q
..K ^TMP("PXRMRPCG REPORT",$J)
..S DIR=1
..I $$LAST3^WVHS("PXRMRPCG REPORT",PAT,3,DIR)="" Q
..S RESULT(0)=1_U_"Last Three Breast Imaging Reports "_$S(DIR=1:"(Most Recent to Oldest)",1:"(Oldest to Most Recent)")
..S CNT=0,I=0 F S I=$O(^TMP("PXRMRPCG REPORT",$J,I)) Q:I'>0 D
...S CNT=CNT+1,RESULT(CNT)=$G(^TMP("PXRMRPCG REPORT",$J,I,0))
.I SUB=.01 D Q
..S CNT=0
..;S RESULT(0)=1_U
..S RESULT(0)=1_U_"Open Breast Imaging (Oldest to Most Recent)"
..F X=1:1:$L(FINDVAL,":") D
...K TEXT
...;S TCNT=0
...D GETTEST(+$P(FINDVAL,":",X),.TEXT,.DIAG)
...I X>1 S CNT=CNT+1,RESULT(CNT)="",CNT=CNT+1,RESULT(CNT)="----------------------------------------------------------",CNT=CNT+1,RESULT(CNT)=""
...S TCNT=0 F S TCNT=$O(TEXT(TCNT)) Q:TCNT'>0 S CNT=CNT+1,RESULT(CNT)=TEXT(TCNT)
...S CNT=CNT+1,RESULT(CNT)=""
Q
;
GETWVP(DFN,ITEM,TEXT) ;
N ACCESS,CNT,DTE,DATE,DIAGNS,ERROR,FUDATE,ID,NODE,PREVDT,PREVIEN,PREVDX,SECDX,TCNT,TEMP
N WVIENS,WVNTXT,WVRPTIEN,WVSECDXS,X
S NODE=$G(^WV(790.1,+ITEM,0))
D RADCASE^WVALERTR(+ITEM,.DIAGNS,.WVIENS,.WVRPTIEN,.WVSECDXS)
S TCNT=0,DTE=0
S ACCESS=$P(NODE,U),TCNT=TCNT+1,TEXT(TCNT)="Accession #: "_ACCESS
S TEMP=$P(NODE,U,4) I TEMP'="" D
.S TCNT=TCNT+1,TEXT(TCNT)="Procedure: "_$P($G(^WV(790.2,TEMP,0)),U)
S TEMP=$P(NODE,U,12) I TEMP'="" D
.S DTE=TEMP
.S TCNT=TCNT+1,TEXT(TCNT)="Date of Procedure: "_$$FMTE^XLFDT(TEMP)
I $P(NODE,U,14)="e" D Q
.S TCNT=TCNT+1,TEXT(TCNT)="Outside Procedure marked ENTER IN ERROR"
S TCNT=TCNT+1,TEXT(TCNT)=""
S TEMP=$P(NODE,U,5) I TEMP'="" D
.S TEMP=$$RETBIRAD($P($G(^WV(790.31,TEMP,0)),U),DTE)
.S TCNT=TCNT+1,TEXT(TCNT)="Primary Result: "_TEMP
I $D(WVSECDXS)>1 D
.S SECDX="" F S SECDX=$O(WVSECDXS(SECDX)) Q:SECDX="" D
..S TCNT=TCNT+1,TEXT(TCNT)="Secondary Result(s): "_SECDX
;AGP TODO BEGIN display previous diagnosis if set
I $D(^WV(790.1,+ITEM,11,"D")) D
.S TCNT=TCNT+1,TEXT(TCNT)="Radiology report changed; prior report result was:"
.S PREVDT=""
.F S PREVDT=$O(^WV(790.1,+ITEM,11,"D",PREVDT)) Q:PREVDT="" D
..S PREVIEN=0
..F S PREVIEN=$O(^WV(790.1,+ITEM,11,"D",PREVDT,PREVIEN)) Q:PREVIEN="" D
...S PREVDX=+$P($G(^WV(790.1,+ITEM,11,PREVIEN,0)),U) I PREVDX=0 Q
...S TEMP=$P($G(^WV(790.31,PREVDX,0)),U)
...S TCNT=TCNT+1,TEXT(TCNT)=TEMP_" changed on "_$$FMTE^XLFDT(PREVDT)
;AGP TODO END
S TCNT=TCNT+1,TEXT(TCNT)=""
I +$P(NODE,U,36)=1 S TCNT=TCNT+1,TEXT(TCNT)="Outside Report: True"
I +$P(NODE,U,36)'=1 D
.S TCNT=TCNT+1,TEXT(TCNT)="Radiology Case#: "_$P(NODE,U,15)
.S TCNT=TCNT+1,TEXT(TCNT)="Provider: "_$S($P(NODE,U,7)>0:$$GET1^DIQ(200,$P(NODE,U,7),.01),1:"None define")
I $G(^WV(790.1,+ITEM,3))'="" S TCNT=TCNT+1,TEXT(TCNT)="Procedure Comments: "_$G(^WV(790.1,+ITEM,3))
;
I $D(^WV(790.1,+ITEM,10,"DATE")) D
.S TCNT=TCNT+1,TEXT(TCNT)=""
.S DATE=0 F S DATE=$O(^WV(790.1,+ITEM,10,"DATE",DATE)) Q:DATE'>0 D
..S TCNT=TCNT+1,TEXT(TCNT)="Review of recommendations done on "_$$FMTE^XLFDT(DATE)
..S TEMP="" F S TEMP=$O(^WV(790.1,+ITEM,10,"DATE",DATE,TEMP)) Q:TEMP="" D
...S TCNT=TCNT+1,TEXT(TCNT)=TEMP
...S ID=$O(^WV(790.1,+ITEM,10,"DATE",DATE,TEMP,"")) Q:ID=""
...S ERROR=$S($P($G(^WV(790.1,+ITEM,10,ID,0)),U,5)="Y":1,1:0)
...S FUDATE=+$P($G(^WV(790.1,+ITEM,10,ID,0)),U,6)
...I FUDATE>0 S TEXT(TCNT)=TEXT(TCNT)_" by "_$$FMTE^XLFDT(FUDATE)
...I ERROR S TEXT(TCNT)=TEXT(TCNT)_" marked ENTER IN ERROR"
...I 'ERROR,$G(^WV(790.1,+ITEM,10,ID,1))'="" S TCNT=TCNT+1,TEXT(TCNT)="Comment: "_$G(^WV(790.1,+ITEM,10,ID,1))
;
D GETWVN(DFN,ACCESS,.WVNTXT)
S TCNT=TCNT+1,TEXT(TCNT)=""
S CNT=0 F S CNT=$O(WVNTXT(CNT)) Q:CNT'>0 S TCNT=TCNT+1,TEXT(TCNT)=WVNTXT(CNT)
Q
;
GETWVN(DFN,ITEM,TEXT) ;
N DATE,IEN,ERROR,FIRST,METHOD,NAME,NODE,PURIEN,PUR,TCNT,TEMP,WHO
S TCNT=0,FIRST=1
S TCNT=TCNT+1,TEXT(TCNT)="Prior Patient communication details:"
S IEN=0 F S IEN=$O(^WV(790.4,"C",ITEM,IEN)) Q:IEN'>0 D
.S NODE=$G(^WV(790.4,IEN,0))
.I $P(NODE,U,14)="e" Q
.S PURIEN=$P(NODE,U,4) Q:PURIEN'>0
.S PUR=$P($G(^WV(790.404,PURIEN,0)),U)
.S TEMP=$P(NODE,U,3) I TEMP="" Q
.I TEMP'="" S NAME=$P($G(^WV(790.403,TEMP,0)),U)
.S DATE=+$P(NODE,U,8)
.I $P($G(^WV(790.4,IEN,1)),U)'="" D Q
..;I +DATE>0 S METHOD(NAME)=U_$$FMTE^XLFDT(DATE) Q
..;S NODE=$G(^WV(790.4,IEN,1)) I NODE'=U S TCNT=TCNT+1,TEXT(TCNT)="Communication detail: Spoke to "_$P(NODE,U)_" on "_$$FMTE^XLFDT($P(NODE,U,2))
..;S NODE=$G(^WV(790.4,IEN,1)) I NODE'=U S TCNT=TCNT+1,TEXT(TCNT)="Spoke to "_$P(NODE,U)_" on "_$$FMTE^XLFDT($P(NODE,U,2)) Q
..S NODE=$G(^WV(790.4,IEN,1)) I NODE'=U S METHOD("Spoke to "_$P(NODE,U)_" on "_$$FMTE^XLFDT($P(NODE,U,2)))="" Q
..;S TCNT=TCNT+1,TEXT(TCNT)=NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:"")
..S METHOD(NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:""))=""
.;S TCNT=TCNT+1,TEXT(TCNT)=NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:"")
.S METHOD(NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:""))=""
S TEMP="" F S TEMP=$O(METHOD(TEMP)) Q:TEMP="" D
.S TCNT=TCNT+1,TEXT(TCNT)=TEMP
I TCNT=1 S TCNT=TCNT+1,TEXT(TCNT)="None on file"
Q
;
BRNEEDS(RESULT,BDT,EDT,TEST) ;
N DATE,END,PAT,PROC
S PROC=$O(^WV(790.51,"B",TEST,"")) Q:PROC'>0
S DATE=$S(BDT>0:BDT,1:0)
S END=$S(EDT>0:EDT,1:DT)
F S DATE=$O(^WV(790,"BRNEEDS",PROC,DATE)) Q:DATE'>0!(DATE'<END) D
.S PAT="" F S PAT=$O(^WV(790,"BRNEEDS",PROC,DATE,PAT)) Q:PAT'>0 S RESULT(PAT)=DATE
Q
;
GETTEST(WVIEN,TEXT,DIAG) ;
N Y
K ^TMP("WV RPT",$J)
D EN^WVALERTR(+WVIEN,.DIAG)
I '$D(^TMP("WV RPT",$J)) S TEXT(1)="No Imaging found in Radiology Package" Q
S Y=0 F S Y=$O(^TMP("WV RPT",$J,Y)) Q:Y'>0 S INC=INC+1,TEXT(INC)=$G(^TMP("WV RPT",$J,Y,0))
K ^TMP("WV RPT",$J)
Q
;
SETOPEN(DA,VALUES) ;
I +VALUES(1)'>0 Q 0
I VALUES(2)="" Q 0
I VALUES(3)="" Q 0
I VALUES(4)'="o" Q 0
Q 1
;
KILLOPEN(DA,VALUES) ;
I +VALUES(1)'>0 Q 1
I VALUES(2)="" Q 1
I VALUES(3)="" Q 1
I VALUES(4)'="o" Q 1
Q 0
;
RETBIRAD(CODE,PDTE) ;
N DTE,WVDATES
I PDTE=0 Q CODE
;I '$$INSTALDT^XPDUTL("WV*1.0*32",.WVDATES) Q CODE
I '$$INSTALDT^XPDUTL("RA*5.0*206",.WVDATES) Q CODE
I CODE'="BI-RADS CATEGORY 0 Need Additional Imaging Evaluation" Q CODE
S DTE=+$O(WVDATES("A"),-1) I DTE=0 Q CODE
I PDTE<DTE S CODE="BI-RADS CATEGORY 0"
Q CODE
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HWVRPCGF1 11605 printed Oct 16, 2024@18:48:06 Page 2
WVRPCGF1 ;ISP/AGP - APIs for Clinical Reminders ;Oct 24, 2023@15:22:45
+1 ;;1.0;WOMEN'S HEALTH;**24,26,32**;Sep 30, 1998;Build 7
+2 ;
+3 ;
ACOPY(REF,OUTPUT) ;Copy all the descendants of the array reference into a linear
+1 ;array. REF is the starting array reference, for example A or
+2 ;^TMP("PXRM",$J). OUTPUT is the linear array for the output. It
+3 ;should be in the form of a closed root, i.e., A() or ^TMP($J,).
+4 ;Note OUTPUT cannot be used as the name of the output array.
+5 NEW DONE,IND,LEN,NL,OROOT,OUT,PROOT,ROOT,START,TEMP
+6 IF REF=""
QUIT
+7 SET NL=0
+8 SET OROOT=$PIECE(OUTPUT,")",1)
+9 SET PROOT=$PIECE(REF,")",1)
+10 ;Build the root so we can tell when we are done.
+11 SET TEMP=$NAME(@REF)
+12 SET ROOT=$PIECE(TEMP,")",1)
+13 SET REF=$QUERY(@REF)
+14 IF REF'[ROOT
QUIT
+15 SET DONE=0
+16 FOR
if (REF="")!(DONE)
QUIT
Begin DoDot:1
+17 SET START=$FIND(REF,ROOT)
+18 SET LEN=$LENGTH(REF)
+19 SET IND=$EXTRACT(REF,START,LEN)
+20 SET NL=NL+1
+21 SET OUT=OROOT_NL_")"
+22 SET @OUT=PROOT_IND_"="_@REF
+23 SET REF=$QUERY(@REF)
+24 IF REF'[ROOT
SET DONE=1
End DoDot:1
+25 QUIT
+26 ;
+27 ;build error message array
BLDMSG(PAT,SUBJ,NUM) ;
+1 NEW CNT,ERR,GROUP,XMDUZ,XMSUB,XMTEXT,Y
+2 KILL ^TMP("WV MSG",$JOB),XMY
+3 SET GROUP=$$GETMAILG^WVUTL4()
+4 SET CNT=0
SET XMDUZ=DUZ
SET XMSUB=SUBJ
SET XMTEXT="^TMP(""WV MSG"",$J,"
SET XMY(DUZ)=""
SET XMY("G."_GROUP)=""
+5 SET NUM=NUM+1
SET ^TMP("WV MSG",$JOB,NUM,0)="Patient DFN: "_PAT
+6 SET NUM=NUM+1
SET ^TMP("WV MSG",$JOB,NUM,0)="ERROR:"
+7 DO ACOPY("WVERR","ERR()")
+8 SET CNT=0
FOR
SET CNT=$ORDER(ERR(CNT))
if CNT'>0
QUIT
SET NUM=NUM+1
SET ^TMP("WV MSG",$JOB,NUM,0)=ERR(CNT)
+9 SET NUM=NUM+1
SET ^TMP("WV MSG",$JOB,NUM,0)=""
+10 SET NUM=NUM+1
SET ^TMP("WV MSG",$JOB,NUM,0)="INPUTS:"
+11 KILL ERR
+12 DO ACOPY("INPUTS","ERR()")
+13 DO ^XMD
+14 QUIT
+15 ;
MKWSDEV ;Make the WV WORKSTATION device.
+1 NEW FDA,FDAIEN,MSG
+2 ;Make sure that the device does not get created more than once.
+3 IF +$$FIND1^DIC(3.5,"","MX","WV WORKSTATION")>0
QUIT
+4 ;NAME
SET FDA(3.5,"+1,",.01)="WV WORKSTATION"
+5 ;LOCATION OF TERMINAL
SET FDA(3.5,"+1,",.02)="WV Workstation HFS Device"
+6 ;$I
SET FDA(3.5,"+1,",1)="WVWSD.DAT"
+7 ;SIGN-ON/SYSTEM DEVICE
SET FDA(3.5,"+1,",1.95)=0
+8 ;TYPE
SET FDA(3.5,"+1,",2)="HFS"
+9 ;SUBTYPE
SET FDA(3.5,"+1,",3)=$$FIND1^DIC(3.2,"","MX","P-OTHER")
+10 ;ASK DEVICE
SET FDA(3.5,"+1,",4)=0
+11 ;ASK PARAMETERS
SET FDA(3.5,"+1,",5)=0
+12 ;ASK HOST FILE
SET FDA(3.5,"+1,",5.1)=0
+13 ;ASK HFS I/O OPERATION
SET FDA(3.5,"+1,",5.2)=0
+14 DO UPDATE^DIE("","FDA","FDAIEN","MSG")
+15 QUIT
+16 ;
+17 ;print api for CPRS view/print RPC
PRINT(RESULT,WVDFN,WVPURPTX) ;
+1 NEW BY,DIWF
+2 NEW %ZIS,BY,DC,DHD,DONE,FF,FILENAME,FILESPEC,FLDS,FR,GBL,HFNAME
+3 NEW IND,IOP,NOW,PATH,VAR,WVPURP,SUCCESS,TO,UNIQN
+4 SET WVPURP=$ORDER(^WV(790.404,"B",WVPURPTX,""))
IF WVPURP'>0
QUIT
+5 ;D MKWSDEV^PXRMHOST
+6 DO MKWSDEV
+7 ;Set up the output file before DIP is called.
+8 SET PATH=$$PWD^%ZISH
+9 SET NOW=$$NOW^XLFDT
+10 SET NOW=$TRANSLATE(NOW,".","")
+11 SET UNIQN=$JOB_NOW
+12 SET FILENAME="WVLETTER"_UNIQN_".DAT"
+13 SET HFNAME=PATH_FILENAME
+14 SET IOP="WV WORKSTATION;80"
+15 SET %ZIS("HFSMODE")="W"
+16 SET %ZIS("HFSNAME")=HFNAME
+17 SET DIWF="^WV(790.404,WVPURP,1,"
+18 SET DIWF(1)=790
+19 SET BY="INTERNAL(#.01)="_WVDFN
+20 ;get current complete address
DO GADD^WVUTL9(WVDFN)
+21 ;set complete address in File 790
DO SADD^WVUTL9(WVDFN)
+22 ;clean-up VADPT variables used
DO KVAR^WVUTL9
+23 DO EN2^DIWF
+24 SET GBL="^TMP(""WVLETTER"",$J,1,0)"
+25 SET GBL=$NAME(@GBL)
+26 KILL ^TMP("WVLETTER",$JOB)
+27 SET SUCCESS=$$FTG^%ZISH(PATH,FILENAME,GBL,3)
+28 ;Look for a form feed, remove it and all subsequent lines.
+29 SET FF=$CHAR(12)
+30 IF $GET(VAR)["^"
Begin DoDot:1
+31 SET VAR=$NAME(@VAR)
+32 SET VAR=$PIECE(VAR,")",1)
+33 SET VAR=VAR_",IND,0)"
+34 SET (DONE,IND)=0
+35 FOR
if DONE
QUIT
SET IND=$ORDER(^TMP("WVLETTER",$JOB,IND))
if +IND=0
QUIT
Begin DoDot:2
+36 IF ^TMP("WVLETTER",$JOB,IND,0)=FF
SET DONE=1
QUIT
+37 SET @VAR=^TMP("WVLETTER",$JOB,IND,0)
End DoDot:2
End DoDot:1
+38 IF '$TEST
Begin DoDot:1
+39 SET (DONE,IND)=0
+40 FOR
if DONE
QUIT
SET IND=$ORDER(^TMP("WVLETTER",$JOB,IND))
if +IND=0
QUIT
Begin DoDot:2
+41 SET VAR(IND)=^TMP("WVLETTER",$JOB,IND,0)
+42 IF VAR(IND)=FF
SET DONE=1
End DoDot:2
End DoDot:1
+43 SET IND=0
FOR
SET IND=$ORDER(^TMP("WVLETTER",$JOB,IND))
if IND'>0
QUIT
Begin DoDot:1
+44 SET RESULT(IND)=$GET(^TMP("WVLETTER",$JOB,IND,0))
End DoDot:1
+45 SET RESULT(0)=1_U_WVPURPTX_" letter"
+46 KILL ^TMP("WVLETTER",$JOB)
+47 ;Delete the host file.
+48 SET FILESPEC(FILENAME)=""
+49 SET SUCCESS=$$DEL^%ZISH(PATH,$NAME(FILESPEC))
+50 QUIT
+51 ;
NEXTPROC(DFN,TYPE) ;
+1 NEW NAME,NODE
+2 IF TYPE="BR"
SET NODE=$PIECE($GET(^WV(790,DFN,0)),U,18,19)
+3 IF TYPE="CX"
SET NODE=$PIECE($GET(^WV(790,DFN,0)),U,11,12)
+4 IF +$PIECE(NODE,U)'>0
QUIT ""
+5 IF +$PIECE(NODE,U,2)'>0
QUIT ""
+6 IF TYPE="BR"
SET NAME=$PIECE($GET(^WV(790.51,$PIECE(NODE,U),0)),U)
+7 IF TYPE="CX"
SET NAME=$PIECE($GET(^WV(790.5,$PIECE(NODE,U),0)),U)
+8 IF NAME=""
QUIT ""
+9 QUIT NAME_U_$PIECE(NODE,U,2)
+10 ;
VIEWDATA(RESULT,DATA,PAT,FINDVAL) ;
+1 ;FINDINGS("WOMEN'S HEALTH",FILE,CNT)=SUBSCRIPT_U_VALUE_U_PROMPT TYPE IEN_U_PROMPT SUBSCRIPT
+2 NEW CNT,PKG,FILE,NODE,SUB,VALUE
+3 SET PKG="WOMEN'S HEALTH"
+4 IF '$DATA(DATA(PKG,790.4))
IF '$DATA(DATA(PKG,790.1))
QUIT
+5 IF $DATA(DATA(PKG,790.4))
DO V7904(.RESULT,.DATA,PAT,FINDVAL)
+6 IF $DATA(DATA(PKG,790.1))
DO V7901(.RESULT,.DATA,PAT,FINDVAL)
+7 QUIT
+8 ;
V7904(RESULT,DATA,PAT,FINDVAL) ;
+1 NEW INC,NODE,PKG,SUB,SUB1,VALUE
+2 SET PKG="WOMEN'S HEALTH"
+3 SET INC=0
FOR
SET INC=$ORDER(DATA(PKG,790.4,INC))
if INC'>0
QUIT
Begin DoDot:1
+4 SET NODE=$GET(DATA(PKG,790.4,INC))
+5 SET SUB=$PIECE(NODE,U)
SET VALUE=$PIECE(NODE,U,2)
SET SUB1=$PIECE(NODE,U,4)
+6 IF SUB=".04"
DO PRINT^WVRPCGF1(.RESULT,PAT,VALUE)
QUIT
+7 ;I SUB="No Notifications" D
+8 ;.S RESULT(0)=0_U_"Procedure(s) with no documented notification"
+9 ;.D FNDWDATA^PXRMRPCG(.RESULT,PAT,IEN,FINDVAL,VALUE)
End DoDot:1
+10 QUIT
+11 ;
V7901(RESULT,DATA,PAT,FINDVAL) ;
+1 NEW CNT,DIR,DIAG,I,INC,NODE,PKG,SUB,SUB1,TCNT,TEXT,VALUE,X
+2 SET PKG="WOMEN'S HEALTH"
+3 SET INC=0
FOR
SET INC=$ORDER(DATA(PKG,790.1,INC))
if INC'>0
QUIT
Begin DoDot:1
+4 SET NODE=$GET(DATA(PKG,790.1,INC))
+5 SET SUB=$PIECE(NODE,U)
SET VALUE=$PIECE(NODE,U,2)
SET SUB1=$PIECE(NODE,U,4)
+6 IF SUB="LAST THREE TRMTS"
Begin DoDot:2
+7 KILL ^TMP("PXRMRPCG REPORT",$JOB)
+8 SET DIR=1
+9 IF $$LAST3^WVHS("PXRMRPCG REPORT",PAT,3,DIR)=""
QUIT
+10 SET RESULT(0)=1_U_"Last Three Breast Imaging Reports "_$SELECT(DIR=1:"(Most Recent to Oldest)",1:"(Oldest to Most Recent)")
+11 SET CNT=0
SET I=0
FOR
SET I=$ORDER(^TMP("PXRMRPCG REPORT",$JOB,I))
if I'>0
QUIT
Begin DoDot:3
+12 SET CNT=CNT+1
SET RESULT(CNT)=$GET(^TMP("PXRMRPCG REPORT",$JOB,I,0))
End DoDot:3
End DoDot:2
QUIT
+13 IF SUB=.01
Begin DoDot:2
+14 SET CNT=0
+15 ;S RESULT(0)=1_U
+16 SET RESULT(0)=1_U_"Open Breast Imaging (Oldest to Most Recent)"
+17 FOR X=1:1:$LENGTH(FINDVAL,":")
Begin DoDot:3
+18 KILL TEXT
+19 ;S TCNT=0
+20 DO GETTEST(+$PIECE(FINDVAL,":",X),.TEXT,.DIAG)
+21 IF X>1
SET CNT=CNT+1
SET RESULT(CNT)=""
SET CNT=CNT+1
SET RESULT(CNT)="----------------------------------------------------------"
SET CNT=CNT+1
SET RESULT(CNT)=""
+22 SET TCNT=0
FOR
SET TCNT=$ORDER(TEXT(TCNT))
if TCNT'>0
QUIT
SET CNT=CNT+1
SET RESULT(CNT)=TEXT(TCNT)
+23 SET CNT=CNT+1
SET RESULT(CNT)=""
End DoDot:3
End DoDot:2
QUIT
End DoDot:1
+24 QUIT
+25 ;
GETWVP(DFN,ITEM,TEXT) ;
+1 NEW ACCESS,CNT,DTE,DATE,DIAGNS,ERROR,FUDATE,ID,NODE,PREVDT,PREVIEN,PREVDX,SECDX,TCNT,TEMP
+2 NEW WVIENS,WVNTXT,WVRPTIEN,WVSECDXS,X
+3 SET NODE=$GET(^WV(790.1,+ITEM,0))
+4 DO RADCASE^WVALERTR(+ITEM,.DIAGNS,.WVIENS,.WVRPTIEN,.WVSECDXS)
+5 SET TCNT=0
SET DTE=0
+6 SET ACCESS=$PIECE(NODE,U)
SET TCNT=TCNT+1
SET TEXT(TCNT)="Accession #: "_ACCESS
+7 SET TEMP=$PIECE(NODE,U,4)
IF TEMP'=""
Begin DoDot:1
+8 SET TCNT=TCNT+1
SET TEXT(TCNT)="Procedure: "_$PIECE($GET(^WV(790.2,TEMP,0)),U)
End DoDot:1
+9 SET TEMP=$PIECE(NODE,U,12)
IF TEMP'=""
Begin DoDot:1
+10 SET DTE=TEMP
+11 SET TCNT=TCNT+1
SET TEXT(TCNT)="Date of Procedure: "_$$FMTE^XLFDT(TEMP)
End DoDot:1
+12 IF $PIECE(NODE,U,14)="e"
Begin DoDot:1
+13 SET TCNT=TCNT+1
SET TEXT(TCNT)="Outside Procedure marked ENTER IN ERROR"
End DoDot:1
QUIT
+14 SET TCNT=TCNT+1
SET TEXT(TCNT)=""
+15 SET TEMP=$PIECE(NODE,U,5)
IF TEMP'=""
Begin DoDot:1
+16 SET TEMP=$$RETBIRAD($PIECE($GET(^WV(790.31,TEMP,0)),U),DTE)
+17 SET TCNT=TCNT+1
SET TEXT(TCNT)="Primary Result: "_TEMP
End DoDot:1
+18 IF $DATA(WVSECDXS)>1
Begin DoDot:1
+19 SET SECDX=""
FOR
SET SECDX=$ORDER(WVSECDXS(SECDX))
if SECDX=""
QUIT
Begin DoDot:2
+20 SET TCNT=TCNT+1
SET TEXT(TCNT)="Secondary Result(s): "_SECDX
End DoDot:2
End DoDot:1
+21 ;AGP TODO BEGIN display previous diagnosis if set
+22 IF $DATA(^WV(790.1,+ITEM,11,"D"))
Begin DoDot:1
+23 SET TCNT=TCNT+1
SET TEXT(TCNT)="Radiology report changed; prior report result was:"
+24 SET PREVDT=""
+25 FOR
SET PREVDT=$ORDER(^WV(790.1,+ITEM,11,"D",PREVDT))
if PREVDT=""
QUIT
Begin DoDot:2
+26 SET PREVIEN=0
+27 FOR
SET PREVIEN=$ORDER(^WV(790.1,+ITEM,11,"D",PREVDT,PREVIEN))
if PREVIEN=""
QUIT
Begin DoDot:3
+28 SET PREVDX=+$PIECE($GET(^WV(790.1,+ITEM,11,PREVIEN,0)),U)
IF PREVDX=0
QUIT
+29 SET TEMP=$PIECE($GET(^WV(790.31,PREVDX,0)),U)
+30 SET TCNT=TCNT+1
SET TEXT(TCNT)=TEMP_" changed on "_$$FMTE^XLFDT(PREVDT)
End DoDot:3
End DoDot:2
End DoDot:1
+31 ;AGP TODO END
+32 SET TCNT=TCNT+1
SET TEXT(TCNT)=""
+33 IF +$PIECE(NODE,U,36)=1
SET TCNT=TCNT+1
SET TEXT(TCNT)="Outside Report: True"
+34 IF +$PIECE(NODE,U,36)'=1
Begin DoDot:1
+35 SET TCNT=TCNT+1
SET TEXT(TCNT)="Radiology Case#: "_$PIECE(NODE,U,15)
+36 SET TCNT=TCNT+1
SET TEXT(TCNT)="Provider: "_$SELECT($PIECE(NODE,U,7)>0:$$GET1^DIQ(200,$PIECE(NODE,U,7),.01),1:"None define")
End DoDot:1
+37 IF $GET(^WV(790.1,+ITEM,3))'=""
SET TCNT=TCNT+1
SET TEXT(TCNT)="Procedure Comments: "_$GET(^WV(790.1,+ITEM,3))
+38 ;
+39 IF $DATA(^WV(790.1,+ITEM,10,"DATE"))
Begin DoDot:1
+40 SET TCNT=TCNT+1
SET TEXT(TCNT)=""
+41 SET DATE=0
FOR
SET DATE=$ORDER(^WV(790.1,+ITEM,10,"DATE",DATE))
if DATE'>0
QUIT
Begin DoDot:2
+42 SET TCNT=TCNT+1
SET TEXT(TCNT)="Review of recommendations done on "_$$FMTE^XLFDT(DATE)
+43 SET TEMP=""
FOR
SET TEMP=$ORDER(^WV(790.1,+ITEM,10,"DATE",DATE,TEMP))
if TEMP=""
QUIT
Begin DoDot:3
+44 SET TCNT=TCNT+1
SET TEXT(TCNT)=TEMP
+45 SET ID=$ORDER(^WV(790.1,+ITEM,10,"DATE",DATE,TEMP,""))
if ID=""
QUIT
+46 SET ERROR=$SELECT($PIECE($GET(^WV(790.1,+ITEM,10,ID,0)),U,5)="Y":1,1:0)
+47 SET FUDATE=+$PIECE($GET(^WV(790.1,+ITEM,10,ID,0)),U,6)
+48 IF FUDATE>0
SET TEXT(TCNT)=TEXT(TCNT)_" by "_$$FMTE^XLFDT(FUDATE)
+49 IF ERROR
SET TEXT(TCNT)=TEXT(TCNT)_" marked ENTER IN ERROR"
+50 IF 'ERROR
IF $GET(^WV(790.1,+ITEM,10,ID,1))'=""
SET TCNT=TCNT+1
SET TEXT(TCNT)="Comment: "_$GET(^WV(790.1,+ITEM,10,ID,1))
End DoDot:3
End DoDot:2
End DoDot:1
+51 ;
+52 DO GETWVN(DFN,ACCESS,.WVNTXT)
+53 SET TCNT=TCNT+1
SET TEXT(TCNT)=""
+54 SET CNT=0
FOR
SET CNT=$ORDER(WVNTXT(CNT))
if CNT'>0
QUIT
SET TCNT=TCNT+1
SET TEXT(TCNT)=WVNTXT(CNT)
+55 QUIT
+56 ;
GETWVN(DFN,ITEM,TEXT) ;
+1 NEW DATE,IEN,ERROR,FIRST,METHOD,NAME,NODE,PURIEN,PUR,TCNT,TEMP,WHO
+2 SET TCNT=0
SET FIRST=1
+3 SET TCNT=TCNT+1
SET TEXT(TCNT)="Prior Patient communication details:"
+4 SET IEN=0
FOR
SET IEN=$ORDER(^WV(790.4,"C",ITEM,IEN))
if IEN'>0
QUIT
Begin DoDot:1
+5 SET NODE=$GET(^WV(790.4,IEN,0))
+6 IF $PIECE(NODE,U,14)="e"
QUIT
+7 SET PURIEN=$PIECE(NODE,U,4)
if PURIEN'>0
QUIT
+8 SET PUR=$PIECE($GET(^WV(790.404,PURIEN,0)),U)
+9 SET TEMP=$PIECE(NODE,U,3)
IF TEMP=""
QUIT
+10 IF TEMP'=""
SET NAME=$PIECE($GET(^WV(790.403,TEMP,0)),U)
+11 SET DATE=+$PIECE(NODE,U,8)
+12 IF $PIECE($GET(^WV(790.4,IEN,1)),U)'=""
Begin DoDot:2
+13 ;I +DATE>0 S METHOD(NAME)=U_$$FMTE^XLFDT(DATE) Q
+14 ;S NODE=$G(^WV(790.4,IEN,1)) I NODE'=U S TCNT=TCNT+1,TEXT(TCNT)="Communication detail: Spoke to "_$P(NODE,U)_" on "_$$FMTE^XLFDT($P(NODE,U,2))
+15 ;S NODE=$G(^WV(790.4,IEN,1)) I NODE'=U S TCNT=TCNT+1,TEXT(TCNT)="Spoke to "_$P(NODE,U)_" on "_$$FMTE^XLFDT($P(NODE,U,2)) Q
+16 SET NODE=$GET(^WV(790.4,IEN,1))
IF NODE'=U
SET METHOD("Spoke to "_$PIECE(NODE,U)_" on "_$$FMTE^XLFDT($PIECE(NODE,U,2)))=""
QUIT
+17 ;S TCNT=TCNT+1,TEXT(TCNT)=NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:"")
+18 SET METHOD(NAME_$SELECT(DATE>0:" "_$$FMTE^XLFDT(DATE),1:""))=""
End DoDot:2
QUIT
+19 ;S TCNT=TCNT+1,TEXT(TCNT)=NAME_$S(DATE>0:" "_$$FMTE^XLFDT(DATE),1:"")
+20 SET METHOD(NAME_$SELECT(DATE>0:" "_$$FMTE^XLFDT(DATE),1:""))=""
End DoDot:1
+21 SET TEMP=""
FOR
SET TEMP=$ORDER(METHOD(TEMP))
if TEMP=""
QUIT
Begin DoDot:1
+22 SET TCNT=TCNT+1
SET TEXT(TCNT)=TEMP
End DoDot:1
+23 IF TCNT=1
SET TCNT=TCNT+1
SET TEXT(TCNT)="None on file"
+24 QUIT
+25 ;
BRNEEDS(RESULT,BDT,EDT,TEST) ;
+1 NEW DATE,END,PAT,PROC
+2 SET PROC=$ORDER(^WV(790.51,"B",TEST,""))
if PROC'>0
QUIT
+3 SET DATE=$SELECT(BDT>0:BDT,1:0)
+4 SET END=$SELECT(EDT>0:EDT,1:DT)
+5 FOR
SET DATE=$ORDER(^WV(790,"BRNEEDS",PROC,DATE))
if DATE'>0!(DATE'<END)
QUIT
Begin DoDot:1
+6 SET PAT=""
FOR
SET PAT=$ORDER(^WV(790,"BRNEEDS",PROC,DATE,PAT))
if PAT'>0
QUIT
SET RESULT(PAT)=DATE
End DoDot:1
+7 QUIT
+8 ;
GETTEST(WVIEN,TEXT,DIAG) ;
+1 NEW Y
+2 KILL ^TMP("WV RPT",$JOB)
+3 DO EN^WVALERTR(+WVIEN,.DIAG)
+4 IF '$DATA(^TMP("WV RPT",$JOB))
SET TEXT(1)="No Imaging found in Radiology Package"
QUIT
+5 SET Y=0
FOR
SET Y=$ORDER(^TMP("WV RPT",$JOB,Y))
if Y'>0
QUIT
SET INC=INC+1
SET TEXT(INC)=$GET(^TMP("WV RPT",$JOB,Y,0))
+6 KILL ^TMP("WV RPT",$JOB)
+7 QUIT
+8 ;
SETOPEN(DA,VALUES) ;
+1 IF +VALUES(1)'>0
QUIT 0
+2 IF VALUES(2)=""
QUIT 0
+3 IF VALUES(3)=""
QUIT 0
+4 IF VALUES(4)'="o"
QUIT 0
+5 QUIT 1
+6 ;
KILLOPEN(DA,VALUES) ;
+1 IF +VALUES(1)'>0
QUIT 1
+2 IF VALUES(2)=""
QUIT 1
+3 IF VALUES(3)=""
QUIT 1
+4 IF VALUES(4)'="o"
QUIT 1
+5 QUIT 0
+6 ;
RETBIRAD(CODE,PDTE) ;
+1 NEW DTE,WVDATES
+2 IF PDTE=0
QUIT CODE
+3 ;I '$$INSTALDT^XPDUTL("WV*1.0*32",.WVDATES) Q CODE
+4 IF '$$INSTALDT^XPDUTL("RA*5.0*206",.WVDATES)
QUIT CODE
+5 IF CODE'="BI-RADS CATEGORY 0 Need Additional Imaging Evaluation"
QUIT CODE
+6 SET DTE=+$ORDER(WVDATES("A"),-1)
IF DTE=0
QUIT CODE
+7 IF PDTE<DTE
SET CODE="BI-RADS CATEGORY 0"
+8 QUIT CODE
+9 ;