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

WVRPCGF1.m

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