RARTE7 ;HISC/SM continuation - Delete a Report, Outside Rpt misc;10/10/08 16:05 ; 17 Aug 2011 4:25 PM
;;5.0;Radiology/Nuclear Medicine;**56,95,97,1003**;Nov 01, 2010;Build 3
;Supported IA #2053 NOW^XLFDT, FILE^DIE, UPDATE^DIE
;Supported IA #2052 GET1^DID
;Supported IA #2055 ROOT^DILFD
Q
MARKDEL ; set field 5 to "X" to mark rpt as deleted
; also update activity log, send report deletion bulletin, store then delete
; associated DX, Staff, Resident data
N DA,DIK,RA1,RA2,RAA,RAFDA,RAIEN2,RAIENDX,RAIENL,RACLOAK
N RAMEMARR,RAMSG,RAOUT,RAPRTSET,RASAVE,RAX,RA7003
N RAF1,RAF2,RAF3,RAIENS
;
;PART 1 - mark report as deleted
;
S RASAVE=$P(^RARPT(RAIEN,0),U,5) ;save current rpt status
S RAFDA(74,RAIEN_",",5)="X" ;change rpt status
D FILE^DIE("","RAFDA")
K RAFDA
;
;PART 2 - add new entry to ACTIVITY LOG and store primary data
;
S RA7003=^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)
S RAIENL="+1,"_RAIEN_","
S RAFDA(74.01,RAIENL,.01)=+$E($$NOW^XLFDT(),1,12)
S RAFDA(74.01,RAIENL,2)="X"
S RAFDA(74.01,RAIENL,3)=$G(DUZ)
S RAFDA(74.01,RAIENL,4)=RASAVE ;store before-delete rpt status
S RAFDA(74.01,RAIENL,5)=$P(RA7003,U,13) ; store Prim DX code
S RAFDA(74.01,RAIENL,7)=$P(RA7003,U,15) ; store Prim Staff
S RAFDA(74.01,RAIENL,9)=$P(RA7003,U,12) ; store Prim Resident
D UPDATE^DIE(,"RAFDA","RAOUT","RAMSG")
W:$D(RAMSG("DIERR")) !!,"Could not update deleted Report's Activity Log."
K RAFDA
;
; store Secondary DXs/Staff/Residents under this ACTIVITY LOG
; if printset, no need to store each case's sec DX, they should be same
Q:'RAOUT(1) ;no record set in 74.01
S RAIEN2=RAOUT(1)
;
;PART 3 - send report deletion bulletin
;
D CLOAK^RABUL3 ; requires RAIEN and RAIEN2
;
;PART 4 - store secondary DX, Staff, Resident data
;
;don't need separate logic for printset for storing identical data
F RAFLD=5,7,9 D SET7401(RAFLD)
;
;PART 5 - remove Prim. and Sec. DX, Staff, Resident from case record
;
D EN2^RAUTL20(.RAMEMARR) ; is case part of a printset?
G:RAPRTSET PSET
;
; single case
;
; delete primaries
S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",13)="@" ;Prim. DX
S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",15)="@" ;Prim. Staff
S RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",12)="@" ;Prim. Resident
D FILE^DIE("","RAFDA")
K RAFDA
;
; delete secondaries
F RASUB=70.14,70.11,70.09 D KILSEC(RASUB,RACNI)
Q
;
; cases from printset
;
PSET ;delete primary and secondary data
S RA1=0
F S RA1=$O(RAMEMARR(RA1)) Q:RA1="" D
.; delete primary from 70.03
.S RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",13)="@" ;Prim. DX
.S RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",15)="@" ;Prim. Staff
.S RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",12)="@" ;Prim. Resident
.D FILE^DIE("","RAFDA")
.K RAFDA
.F RASUB=70.14,70.11,70.09 D KILSEC(RASUB,RA1)
Q
KILSEC(RAF2,RAC1) ;kill secondary data
;RAF2 subfile number from file 70's secondaries
;RAC1 ien for subfile 70.03
N RAA,RAROOT
K DA,DIK
S RAIENS=1_","_RAC1_","_RADTI_","_RADFN_","
S RAROOT=$$ROOT^DILFD(RAF2,RAIENS,1) ; closed root
M RAA=@RAROOT
Q:$O(RAA(0))'>0 ;no secondaries
D DA^DILF(RAIENS,.DA) ;get the DA array
S DIK=$$ROOT^DILFD(RAF2,RAIENS)
S RA2=0
F S RA2=$O(RAA(RA2)) Q:'RA2 S DA=RA2 D ^DIK
K DIK
Q
SET7401(X) ; use this for DX, Staff, Resident secondaries
; set activity log's subfiles to store any secondaries
K RAFDA,RAMSG,RAA
; X is the Field number from subfile 74.01:
; 5 = BEFORE DELETION PRIM. DX CODE
; 7 = BEFORE DELETION PRIM. STAFF
; 9 = BEFORE DELETION PRIM. RESIDENT
;
; RAF1 = subfile number from file 74's activity log
; RAF2 = subfile number from file 70's secondaries
; RAF3 = subfile number pointed to from file 70's secondaries
;
S RAF1=$S(X=5:74.16,X=7:74.18,X=9:74.19,1:"") Q:RAF1=""
S RAF2=$S(X=5:70.14,X=7:70.11,X=9:70.09,1:"") Q:RAF2=""
S RAIENS=1_","_RACNI_","_RADTI_","_RADFN_","
S RAROOT=$$ROOT^DILFD(RAF2,RAIENS,1) ; closed root, file 70's secondaries
;
;IHS/BJI/DAY - Patch 1003 - Fix SYNTAX error when deleting a report
;RAROOT is null when RAF2=70.09
I RAROOT="" Q
;End Patch
;
M RAA=@RAROOT
Q:$O(RAA(0))'>0 ; no secondaries
;
S RAF3=$$GET1^DID(RAF2,.01,"","POINTER")
; extract file number from RAF3
S RAF3=$TR(RAF3,$TR(RAF3,"0123456789."))
;
; store Secondary DXs
S RA1=0
S RAIENDX="+2,"_RAIEN2_","_RAIEN_","
F S RA1=$O(RAA(RA1)) Q:'RA1 S RAX=$G(RAA(RA1,0)) D:RAX
.S RAFDA(RAF1,RAIENDX,.01)=RAX
.D UPDATE^DIE(,"RAFDA",,"RAMSG")
.W:$D(RAMSG("DIERR")) !!,"Could not store ",$$GET1^DID(RAF2,.01,"","LABEL"),"'s value: ",$$GET1^DIQ(RAF3,RAX,.01)
.K RAFDA,RAMSG
.Q
Q
ANYDX(ARRAY) ; called from RARTE5
; input ARRAY name to store all DXs for this case
; output:
; =1 if one or more diag codes
; =0 if no diag code
; ARRAY() stores diag codes as merged from case
Q:'$D(RADFN)!('$D(RADTI))!('$D(RACNI))
K ARRAY
M ARRAY=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"DX") ;Sec Diags
S ARRAY(9999,0)=$P(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0),U,13) ;Prim Diag
I $O(ARRAY(0)) Q 1
Q 0
;
ALERT ; for Outside Report, ck if new/changed diags require alert
; this is called from RARTE5 each time an outside report is edited
Q:'$D(RADFN)!('$D(RADTI))!('$D(RACNI))
N RASAVE,RAY3,X
; set RASAVE() for OENOTE^RAUTL00
S RASAVE("RADFN")=RADFN,RASAVE("RADTI")=RADTI,RASAVE("RACNI")=RACNI
;
N I
Q:(RANY1=0)&(RANY2=0) ;no diags before and after edit
S I=0
; loop RAA2
F S I=$O(RAA2(I)) Q:'I K:RAA2(I,0)=$G(RAA1(I,0)) RAA2(I,0)
Q:'$O(RAA2(0))
K RAAB
S I=0 F S I=$O(RAA2(I)) Q:'I D
.I $D(^RA(78.3,+RAA2(I,0),0)),($P(^(0),U,4)="y") S RAAB=1
.Q
; invoke notification for either condition:
; (1) new EF report is made --> non-critical imaging alert
; (2) old/new EF report w abnormal DX --> abnormal alert
; either of the above alert may be from an amended report or not
I $G(RAAB)!RAFIRST D
.S RAY3=$G(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
.S X=RAY3 ; X is input to OENOTE
.D OENOTE^RAUTL00
Q
RARTE7 ;HISC/SM continuation - Delete a Report, Outside Rpt misc;10/10/08 16:05 ; 17 Aug 2011 4:25 PM
+1 ;;5.0;Radiology/Nuclear Medicine;**56,95,97,1003**;Nov 01, 2010;Build 3
+2 ;Supported IA #2053 NOW^XLFDT, FILE^DIE, UPDATE^DIE
+3 ;Supported IA #2052 GET1^DID
+4 ;Supported IA #2055 ROOT^DILFD
+5 QUIT
MARKDEL ; set field 5 to "X" to mark rpt as deleted
+1 ; also update activity log, send report deletion bulletin, store then delete
+2 ; associated DX, Staff, Resident data
+3 NEW DA,DIK,RA1,RA2,RAA,RAFDA,RAIEN2,RAIENDX,RAIENL,RACLOAK
+4 NEW RAMEMARR,RAMSG,RAOUT,RAPRTSET,RASAVE,RAX,RA7003
+5 NEW RAF1,RAF2,RAF3,RAIENS
+6 ;
+7 ;PART 1 - mark report as deleted
+8 ;
+9 ;save current rpt status
SET RASAVE=$PIECE(^RARPT(RAIEN,0),U,5)
+10 ;change rpt status
SET RAFDA(74,RAIEN_",",5)="X"
+11 DO FILE^DIE("","RAFDA")
+12 KILL RAFDA
+13 ;
+14 ;PART 2 - add new entry to ACTIVITY LOG and store primary data
+15 ;
+16 SET RA7003=^RADPT(RADFN,"DT",RADTI,"P",RACNI,0)
+17 SET RAIENL="+1,"_RAIEN_","
+18 SET RAFDA(74.01,RAIENL,.01)=+$EXTRACT($$NOW^XLFDT(),1,12)
+19 SET RAFDA(74.01,RAIENL,2)="X"
+20 SET RAFDA(74.01,RAIENL,3)=$GET(DUZ)
+21 ;store before-delete rpt status
SET RAFDA(74.01,RAIENL,4)=RASAVE
+22 ; store Prim DX code
SET RAFDA(74.01,RAIENL,5)=$PIECE(RA7003,U,13)
+23 ; store Prim Staff
SET RAFDA(74.01,RAIENL,7)=$PIECE(RA7003,U,15)
+24 ; store Prim Resident
SET RAFDA(74.01,RAIENL,9)=$PIECE(RA7003,U,12)
+25 DO UPDATE^DIE(,"RAFDA","RAOUT","RAMSG")
+26 IF $DATA(RAMSG("DIERR"))
WRITE !!,"Could not update deleted Report's Activity Log."
+27 KILL RAFDA
+28 ;
+29 ; store Secondary DXs/Staff/Residents under this ACTIVITY LOG
+30 ; if printset, no need to store each case's sec DX, they should be same
+31 ;no record set in 74.01
IF 'RAOUT(1)
QUIT
+32 SET RAIEN2=RAOUT(1)
+33 ;
+34 ;PART 3 - send report deletion bulletin
+35 ;
+36 ; requires RAIEN and RAIEN2
DO CLOAK^RABUL3
+37 ;
+38 ;PART 4 - store secondary DX, Staff, Resident data
+39 ;
+40 ;don't need separate logic for printset for storing identical data
+41 FOR RAFLD=5,7,9
DO SET7401(RAFLD)
+42 ;
+43 ;PART 5 - remove Prim. and Sec. DX, Staff, Resident from case record
+44 ;
+45 ; is case part of a printset?
DO EN2^RAUTL20(.RAMEMARR)
+46 IF RAPRTSET
GOTO PSET
+47 ;
+48 ; single case
+49 ;
+50 ; delete primaries
+51 ;Prim. DX
SET RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",13)="@"
+52 ;Prim. Staff
SET RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",15)="@"
+53 ;Prim. Resident
SET RAFDA(70.03,RACNI_","_RADTI_","_RADFN_",",12)="@"
+54 DO FILE^DIE("","RAFDA")
+55 KILL RAFDA
+56 ;
+57 ; delete secondaries
+58 FOR RASUB=70.14,70.11,70.09
DO KILSEC(RASUB,RACNI)
+59 QUIT
+60 ;
+61 ; cases from printset
+62 ;
PSET ;delete primary and secondary data
+1 SET RA1=0
+2 FOR
SET RA1=$ORDER(RAMEMARR(RA1))
IF RA1=""
QUIT
Begin DoDot:1
+3 ; delete primary from 70.03
+4 ;Prim. DX
SET RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",13)="@"
+5 ;Prim. Staff
SET RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",15)="@"
+6 ;Prim. Resident
SET RAFDA(70.03,RA1_","_RADTI_","_RADFN_",",12)="@"
+7 DO FILE^DIE("","RAFDA")
+8 KILL RAFDA
+9 FOR RASUB=70.14,70.11,70.09
DO KILSEC(RASUB,RA1)
End DoDot:1
+10 QUIT
KILSEC(RAF2,RAC1) ;kill secondary data
+1 ;RAF2 subfile number from file 70's secondaries
+2 ;RAC1 ien for subfile 70.03
+3 NEW RAA,RAROOT
+4 KILL DA,DIK
+5 SET RAIENS=1_","_RAC1_","_RADTI_","_RADFN_","
+6 ; closed root
SET RAROOT=$$ROOT^DILFD(RAF2,RAIENS,1)
+7 MERGE RAA=@RAROOT
+8 ;no secondaries
IF $ORDER(RAA(0))'>0
QUIT
+9 ;get the DA array
DO DA^DILF(RAIENS,.DA)
+10 SET DIK=$$ROOT^DILFD(RAF2,RAIENS)
+11 SET RA2=0
+12 FOR
SET RA2=$ORDER(RAA(RA2))
IF 'RA2
QUIT
SET DA=RA2
DO ^DIK
+13 KILL DIK
+14 QUIT
SET7401(X) ; use this for DX, Staff, Resident secondaries
+1 ; set activity log's subfiles to store any secondaries
+2 KILL RAFDA,RAMSG,RAA
+3 ; X is the Field number from subfile 74.01:
+4 ; 5 = BEFORE DELETION PRIM. DX CODE
+5 ; 7 = BEFORE DELETION PRIM. STAFF
+6 ; 9 = BEFORE DELETION PRIM. RESIDENT
+7 ;
+8 ; RAF1 = subfile number from file 74's activity log
+9 ; RAF2 = subfile number from file 70's secondaries
+10 ; RAF3 = subfile number pointed to from file 70's secondaries
+11 ;
+12 SET RAF1=$SELECT(X=5:74.16,X=7:74.18,X=9:74.19,1:"")
IF RAF1=""
QUIT
+13 SET RAF2=$SELECT(X=5:70.14,X=7:70.11,X=9:70.09,1:"")
IF RAF2=""
QUIT
+14 SET RAIENS=1_","_RACNI_","_RADTI_","_RADFN_","
+15 ; closed root, file 70's secondaries
SET RAROOT=$$ROOT^DILFD(RAF2,RAIENS,1)
+16 ;
+17 ;IHS/BJI/DAY - Patch 1003 - Fix SYNTAX error when deleting a report
+18 ;RAROOT is null when RAF2=70.09
+19 IF RAROOT=""
QUIT
+20 ;End Patch
+21 ;
+22 MERGE RAA=@RAROOT
+23 ; no secondaries
IF $ORDER(RAA(0))'>0
QUIT
+24 ;
+25 SET RAF3=$$GET1^DID(RAF2,.01,"","POINTER")
+26 ; extract file number from RAF3
+27 SET RAF3=$TRANSLATE(RAF3,$TRANSLATE(RAF3,"0123456789."))
+28 ;
+29 ; store Secondary DXs
+30 SET RA1=0
+31 SET RAIENDX="+2,"_RAIEN2_","_RAIEN_","
+32 FOR
SET RA1=$ORDER(RAA(RA1))
IF 'RA1
QUIT
SET RAX=$GET(RAA(RA1,0))
IF RAX
Begin DoDot:1
+33 SET RAFDA(RAF1,RAIENDX,.01)=RAX
+34 DO UPDATE^DIE(,"RAFDA",,"RAMSG")
+35 IF $DATA(RAMSG("DIERR"))
WRITE !!,"Could not store ",$$GET1^DID(RAF2,.01,"","LABEL"),"'s value: ",$$GET1^DIQ(RAF3,RAX,.01)
+36 KILL RAFDA,RAMSG
+37 QUIT
End DoDot:1
+38 QUIT
ANYDX(ARRAY) ; called from RARTE5
+1 ; input ARRAY name to store all DXs for this case
+2 ; output:
+3 ; =1 if one or more diag codes
+4 ; =0 if no diag code
+5 ; ARRAY() stores diag codes as merged from case
+6 IF '$DATA(RADFN)!('$DATA(RADTI))!('$DATA(RACNI))
QUIT
+7 KILL ARRAY
+8 ;Sec Diags
MERGE ARRAY=^RADPT(RADFN,"DT",RADTI,"P",RACNI,"DX")
+9 ;Prim Diag
SET ARRAY(9999,0)=$PIECE(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0),U,13)
+10 IF $ORDER(ARRAY(0))
QUIT 1
+11 QUIT 0
+12 ;
ALERT ; for Outside Report, ck if new/changed diags require alert
+1 ; this is called from RARTE5 each time an outside report is edited
+2 IF '$DATA(RADFN)!('$DATA(RADTI))!('$DATA(RACNI))
QUIT
+3 NEW RASAVE,RAY3,X
+4 ; set RASAVE() for OENOTE^RAUTL00
+5 SET RASAVE("RADFN")=RADFN
SET RASAVE("RADTI")=RADTI
SET RASAVE("RACNI")=RACNI
+6 ;
+7 NEW I
+8 ;no diags before and after edit
IF (RANY1=0)&(RANY2=0)
QUIT
+9 SET I=0
+10 ; loop RAA2
+11 FOR
SET I=$ORDER(RAA2(I))
IF 'I
QUIT
IF RAA2(I,0)=$GET(RAA1(I,0))
KILL RAA2(I,0)
+12 IF '$ORDER(RAA2(0))
QUIT
+13 KILL RAAB
+14 SET I=0
FOR
SET I=$ORDER(RAA2(I))
IF 'I
QUIT
Begin DoDot:1
+15 IF $DATA(^RA(78.3,+RAA2(I,0),0))
IF ($PIECE(^(0),U,4)="y")
SET RAAB=1
+16 QUIT
End DoDot:1
+17 ; invoke notification for either condition:
+18 ; (1) new EF report is made --> non-critical imaging alert
+19 ; (2) old/new EF report w abnormal DX --> abnormal alert
+20 ; either of the above alert may be from an amended report or not
+21 IF $GET(RAAB)!RAFIRST
Begin DoDot:1
+22 SET RAY3=$GET(^RADPT(RADFN,"DT",RADTI,"P",RACNI,0))
+23 ; X is input to OENOTE
SET X=RAY3
+24 DO OENOTE^RAUTL00
End DoDot:1
+25 QUIT