LRERT1 ;DALOI/JDB - STS TEAM UTILITIES ;04/10/12 15:38
;;5.2;LAB SERVICE;**350**;Sep 27, 1994;Build 230
;
; Reference to LABXCPT^HDISVAP1 supported by DBIA #5026
;
; ZEXCEPT is used to identify variables which are external to a specific TAG
; used in conjunction with Eclipse M-editor.
;
Q
;
TASK(LRFN,LRIEN) ;
; Tasks the STS/HDI alert process to ensure FileMan safety.
; Expects X1 and X2 FileMan arrays from Record based xref.
; Inputs
; LRFN: File number
; LRIEN: IEN
;
;ZEXCEPT: X1,X2
;
N LRTN,LRVARS,LRX,LRVARS,LRX1,LRX2
M LRX1=X1
M LRX2=X2
S LRTN="AERT^LRERT1("_LRFN_","_LRIEN_")"
S LRVARS("LRX1(")="" ;Old values
S LRVARS("LRX2(")="" ;New values
S LRX=$$TASK^LRUTIL(LRTN,"Generate STS alert from xref",.LRVARS,1,$H,"")
Q
;
;
AERT(LRFN,LRIEN) ;
; "AERT" new style xref handler (file #61, 61.2, 62)
; FileMan safe
; New style, MUMPS Action, Activity:null, Execution:Record
; Sequence 1 = .01 Sequence 2 = SNOMED CT
;PATCH^XPDUTL/10141
; Inputs
; LRFN: File number
; LRIEN: IEN
; To be 100% FileMan safe, this process should be queued.
; If this term is already in the alert file ^XTMP("LRSCTX-STS" and the SCT code has not changed, no alert is sent.
;
;ZEXCEPT: LRX1,LRX2,ZTQUEUED,ZTREQ
;
; Not being added/changed by user so quit
Q:$D(LRFMERTS)
;
N LRERT,LRNOW,LRTXT
S LRFN=$G(LRFN),LRIEN=$G(LRIEN)
I 'LRFN!('LRIEN) Q
S LRTXT=$G(LRX2(1))
S LRNOW=$$NOW^XLFDT()
S LRERT("FILE")=LRFN
S LRERT("FIEN")=LRIEN
S LRERT("TNUM")=$$TNUM^LRERT(LRFN,LRIEN,LRNOW,3) ;3=local change
S LRERT("SCT")=$G(LRX2(2))
S LRERT("TDT")=LRNOW
S LRERT("STSEXC")=3 ;local change
S LRERT("PREV","TEXT")=$G(LRX1(1))
S LRERT("PREV","SCT")=$G(LRX1(2))
D ;
. N X,X1,X2,Y,DA,DIE,DIC,DIR,D0,DIU,LRX
. S LRX=$$OK2LOG^LRERT(.LRTXT,.LRERT,"LRSCTX-ERT")
. I 'LRX I $P(LRX,"^",2)'=2 Q ;continue if SCT changed
. S LRX=$$LOGIT^LRERT(.LRTXT,.LRERT,"LRSCTX-STS")
. S LRX=$$NOTIFY(.LRTXT,.LRERT)
I $D(ZTQUEUED) S ZTREQ="@"
Q
;
;
NOTIFY(LRTXT,LRERT) ;
;
; Private helper method
; FileMan safe
; Handles STS/Local notification for "local edit" new terms.
; If a new term has been added and not in ^XTMP:
; 1) alert STS 2) Add entry to ^XTMP 3) Email LAB MAPPING group
; Inputs
; LRTXT: Term
; LRERT:<byref>
; Outputs
; String indicating success or error: Status^Error code^text
; Status: 1=success 0=error
; ie "0^1^Term is null" "0^4^"STS & MailMan error"
;
;ZEXCEPT: LRFIEN,LRFILE,LRSCT,NODE
;
N DATA,DATA2,LRLCK,STOP,STR,STR2,NOTIFY,SITE
N TNUM,TMPNM,TEXT,I,II,X,Y,LRHDI,LRHDIERR,TSTAT,TDT
N DA,DR,DIE,DIR,DIC,X,X1,X2,Y,DIERR
S LRTXT=$G(LRTXT)
I $TR(LRTXT," ","")="" Q "0^1^Term is null"
S LRFILE=$G(LRERT("FILE")),LRFIEN=$G(LRERT("FIEN")),LRSCT=$G(LRERT("SCT"))
S NOTIFY=1 ;status of this process
S TMPNM="LRSCTX-STS"
S TDT=$G(LRERT("TDT"))
I TDT="" S TDT=$$NOW^XLFDT() S LRERT("TDT")=TDT
; TSTAT 0=New record 1=Text changed 2=Text same
S TSTAT=$G(LRERT("PREV","TEXT"))'=""
I TSTAT I $G(LRERT("PREV","TEXT"))=LRTXT S TSTAT=2
S TNUM=$G(LRERT("TNUM"))
;
; STS Reporting Array
K DATA,LRHDI
S LRHDI(3,1)=TNUM_"^"_TDT
S X=$$BLDERTX^LRERT(LRFILE,LRFIEN,"|",.DATA,2,"S") ;new data
M LRHDI(3,1,"SA")=DATA
;
; build a pseudo "before" data
I TSTAT D
. M LRHDI(3,1,"SB")=DATA
. S LRHDI(3,1,"SB",2)=$G(LRERT("PREV","TEXT"))
. S LRHDI(3,1,"SB",5)=$G(LRERT("PREV","SCT"))
. S LRHDI(3,1,"SB",6)="" ;SCT text
. S X=$G(LRERT("PREV","SCT"))
. I X'="" D ;
. . K DATA
. . S X=$$CODE^LRSCT(X,"SCT","","DATA")
. . S LRHDI(3,1,"SB",6)=$G(DATA("F"))
;
K DATA
;
S X=$S(TSTAT:"modified in",1:"added to")
S LRHDI(3,1,"TXT")="Term "_X_" file #"_LRFILE_" (entry #"_LRFIEN_")"
;
D LABXCPT^HDISVAP1("LRHDI")
; check LRHDI("ERROR") and add error to local email
K LRHDIERR
M LRHDIERR("ERROR")=LRHDI("ERROR")
K LRHDI
I $D(LRHDIERR) S NOTIFY="0^2^HDI error"
;
; Update ^XTMP
S LRERT("HDIERR")=$S($D(LRHDIERR):1,1:0)
S X=$$LOGIT^LRERT(LRTXT,.LRERT)
;
; Notify local staff of event (G.LAB MAPPING)
N DA,DIE,DIC,DIR,D0,DIFROM,LRMTXT,X,X1,X2,XMDUZ,XMSUB,XMTEXT,XMY,XMZ,XMMG
;
S XMSUB="Local modification to file (#"_LRFILE_":"_LRFIEN_")"
S X=$S(TSTAT:"modified in",1:"added to")
S LRMTXT(1,0)="Term "_X_" file #"_LRFILE_" (entry #"_LRFIEN_")"
S LRMTXT(2,0)=" "
I TSTAT=1 S LRMTXT(3,0)="Previous Text: "_$G(LRERT("PREV","TEXT"))
S LRMTXT(4,0)=$S('TSTAT:"New Text",1:"Term")_": "_LRTXT
S X=$S(TSTAT:"Modified",1:"Added")
S LRMTXT(5,0)=X_" by: "_$$UP^XLFSTR($$NAME^XUSER(DUZ,"F"))
S LRMTXT(6,0)=" "
S LRMTXT(7,0)="Tracking information below:"
S LRMTXT(8,0)="Transaction date: "_$$FMTE^XLFDT(TDT)
S LRMTXT(9,0)="Transaction number: "_TNUM
S LRMTXT(10,0)="SNOMED CT code: "_$S(LRSCT'="":LRSCT,1:"n/a")
I $G(LRERT("PREV","SCT"))'="" D ;
. S X=LRERT("PREV","SCT")
. I X'=$G(LRERT("SCT")) S LRMTXT(11,0)="Previous SNOMED CT code: "_X
;
I $D(LRHDIERR) D ;
. S LRMTXT(20,0)=" "
. S LRMTXT(21,0)="An error occurred when notifying STS:"
. S NODE="LRHDIERR(0)"
. S I=$O(LRMTXT("A"),-1)
. F S NODE=$Q(@NODE) Q:NODE="" S I=I+1,LRMTXT(I,0)=" "_NODE
;
I $$GOTLOCAL^XMXAPIG("LAB MAPPING") S XMY("I:G.LAB MAPPING")=""
E S XMY("I:G.LMI")=""
;
S XMTEXT="LRMTXT("
D ^XMD
I $D(XMMG)!'$G(XMZ) D ;
. I $D(LRHDIERR) S NOTIFY="0^4^STS & Mailman error" Q
. S NOTIFY="0^3^MailMan error"
;
; Update and store this transaction info in the target file.
D SCTUPD
;
Q NOTIFY
;
;
SCTUPD ; Update SCT STATUS DATE multiple
;
;ZEXCEPT: LRDUZ,LRFILE,LRFIEN,TDT,TNUM
;.
N LRERR,LRFDA,LRFLD,LRSUBFILE,LRSTATUS
;
S LRSUBFILE=$S(LRFILE=61:61.023,LRFILE=61.2:61.223,LRFILE=62:62.023,1:"")
I LRSUBFILE="" Q
;
; Store date/time, user and new status
S LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",.01)=TDT
S LRSTATUS=$$GET1^DIQ(LRFILE,LRFIEN_",",21,"I")
S LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",1)=$S(LRSTATUS'="":LRSTATUS,1:"R")
S LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",3)=$S($G(LRDUZ):LRDUZ,1:DUZ)
;
; Store transaction number
S LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",2)=TNUM
;
D UPDATE^DIE("","LRFDA(2)","LRFIEN","LRERR(2)")
;
; Store execption text in WP field
D WP^DIE(LRSUBFILE,LRFIEN(2)_","_LRFIEN_",",4,"A","LRMTXT","LRERR(3)")
;
Q
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HLRERT1 6340 printed Dec 13, 2024@02:14:40 Page 2
LRERT1 ;DALOI/JDB - STS TEAM UTILITIES ;04/10/12 15:38
+1 ;;5.2;LAB SERVICE;**350**;Sep 27, 1994;Build 230
+2 ;
+3 ; Reference to LABXCPT^HDISVAP1 supported by DBIA #5026
+4 ;
+5 ; ZEXCEPT is used to identify variables which are external to a specific TAG
+6 ; used in conjunction with Eclipse M-editor.
+7 ;
+8 QUIT
+9 ;
TASK(LRFN,LRIEN) ;
+1 ; Tasks the STS/HDI alert process to ensure FileMan safety.
+2 ; Expects X1 and X2 FileMan arrays from Record based xref.
+3 ; Inputs
+4 ; LRFN: File number
+5 ; LRIEN: IEN
+6 ;
+7 ;ZEXCEPT: X1,X2
+8 ;
+9 NEW LRTN,LRVARS,LRX,LRVARS,LRX1,LRX2
+10 MERGE LRX1=X1
+11 MERGE LRX2=X2
+12 SET LRTN="AERT^LRERT1("_LRFN_","_LRIEN_")"
+13 ;Old values
SET LRVARS("LRX1(")=""
+14 ;New values
SET LRVARS("LRX2(")=""
+15 SET LRX=$$TASK^LRUTIL(LRTN,"Generate STS alert from xref",.LRVARS,1,$HOROLOG,"")
+16 QUIT
+17 ;
+18 ;
AERT(LRFN,LRIEN) ;
+1 ; "AERT" new style xref handler (file #61, 61.2, 62)
+2 ; FileMan safe
+3 ; New style, MUMPS Action, Activity:null, Execution:Record
+4 ; Sequence 1 = .01 Sequence 2 = SNOMED CT
+5 ;PATCH^XPDUTL/10141
+6 ; Inputs
+7 ; LRFN: File number
+8 ; LRIEN: IEN
+9 ; To be 100% FileMan safe, this process should be queued.
+10 ; If this term is already in the alert file ^XTMP("LRSCTX-STS" and the SCT code has not changed, no alert is sent.
+11 ;
+12 ;ZEXCEPT: LRX1,LRX2,ZTQUEUED,ZTREQ
+13 ;
+14 ; Not being added/changed by user so quit
+15 if $DATA(LRFMERTS)
QUIT
+16 ;
+17 NEW LRERT,LRNOW,LRTXT
+18 SET LRFN=$GET(LRFN)
SET LRIEN=$GET(LRIEN)
+19 IF 'LRFN!('LRIEN)
QUIT
+20 SET LRTXT=$GET(LRX2(1))
+21 SET LRNOW=$$NOW^XLFDT()
+22 SET LRERT("FILE")=LRFN
+23 SET LRERT("FIEN")=LRIEN
+24 ;3=local change
SET LRERT("TNUM")=$$TNUM^LRERT(LRFN,LRIEN,LRNOW,3)
+25 SET LRERT("SCT")=$GET(LRX2(2))
+26 SET LRERT("TDT")=LRNOW
+27 ;local change
SET LRERT("STSEXC")=3
+28 SET LRERT("PREV","TEXT")=$GET(LRX1(1))
+29 SET LRERT("PREV","SCT")=$GET(LRX1(2))
+30 ;
Begin DoDot:1
+31 NEW X,X1,X2,Y,DA,DIE,DIC,DIR,D0,DIU,LRX
+32 SET LRX=$$OK2LOG^LRERT(.LRTXT,.LRERT,"LRSCTX-ERT")
+33 ;continue if SCT changed
IF 'LRX
IF $PIECE(LRX,"^",2)'=2
QUIT
+34 SET LRX=$$LOGIT^LRERT(.LRTXT,.LRERT,"LRSCTX-STS")
+35 SET LRX=$$NOTIFY(.LRTXT,.LRERT)
End DoDot:1
+36 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
+37 QUIT
+38 ;
+39 ;
NOTIFY(LRTXT,LRERT) ;
+1 ;
+2 ; Private helper method
+3 ; FileMan safe
+4 ; Handles STS/Local notification for "local edit" new terms.
+5 ; If a new term has been added and not in ^XTMP:
+6 ; 1) alert STS 2) Add entry to ^XTMP 3) Email LAB MAPPING group
+7 ; Inputs
+8 ; LRTXT: Term
+9 ; LRERT:<byref>
+10 ; Outputs
+11 ; String indicating success or error: Status^Error code^text
+12 ; Status: 1=success 0=error
+13 ; ie "0^1^Term is null" "0^4^"STS & MailMan error"
+14 ;
+15 ;ZEXCEPT: LRFIEN,LRFILE,LRSCT,NODE
+16 ;
+17 NEW DATA,DATA2,LRLCK,STOP,STR,STR2,NOTIFY,SITE
+18 NEW TNUM,TMPNM,TEXT,I,II,X,Y,LRHDI,LRHDIERR,TSTAT,TDT
+19 NEW DA,DR,DIE,DIR,DIC,X,X1,X2,Y,DIERR
+20 SET LRTXT=$GET(LRTXT)
+21 IF $TRANSLATE(LRTXT," ","")=""
QUIT "0^1^Term is null"
+22 SET LRFILE=$GET(LRERT("FILE"))
SET LRFIEN=$GET(LRERT("FIEN"))
SET LRSCT=$GET(LRERT("SCT"))
+23 ;status of this process
SET NOTIFY=1
+24 SET TMPNM="LRSCTX-STS"
+25 SET TDT=$GET(LRERT("TDT"))
+26 IF TDT=""
SET TDT=$$NOW^XLFDT()
SET LRERT("TDT")=TDT
+27 ; TSTAT 0=New record 1=Text changed 2=Text same
+28 SET TSTAT=$GET(LRERT("PREV","TEXT"))'=""
+29 IF TSTAT
IF $GET(LRERT("PREV","TEXT"))=LRTXT
SET TSTAT=2
+30 SET TNUM=$GET(LRERT("TNUM"))
+31 ;
+32 ; STS Reporting Array
+33 KILL DATA,LRHDI
+34 SET LRHDI(3,1)=TNUM_"^"_TDT
+35 ;new data
SET X=$$BLDERTX^LRERT(LRFILE,LRFIEN,"|",.DATA,2,"S")
+36 MERGE LRHDI(3,1,"SA")=DATA
+37 ;
+38 ; build a pseudo "before" data
+39 IF TSTAT
Begin DoDot:1
+40 MERGE LRHDI(3,1,"SB")=DATA
+41 SET LRHDI(3,1,"SB",2)=$GET(LRERT("PREV","TEXT"))
+42 SET LRHDI(3,1,"SB",5)=$GET(LRERT("PREV","SCT"))
+43 ;SCT text
SET LRHDI(3,1,"SB",6)=""
+44 SET X=$GET(LRERT("PREV","SCT"))
+45 ;
IF X'=""
Begin DoDot:2
+46 KILL DATA
+47 SET X=$$CODE^LRSCT(X,"SCT","","DATA")
+48 SET LRHDI(3,1,"SB",6)=$GET(DATA("F"))
End DoDot:2
End DoDot:1
+49 ;
+50 KILL DATA
+51 ;
+52 SET X=$SELECT(TSTAT:"modified in",1:"added to")
+53 SET LRHDI(3,1,"TXT")="Term "_X_" file #"_LRFILE_" (entry #"_LRFIEN_")"
+54 ;
+55 DO LABXCPT^HDISVAP1("LRHDI")
+56 ; check LRHDI("ERROR") and add error to local email
+57 KILL LRHDIERR
+58 MERGE LRHDIERR("ERROR")=LRHDI("ERROR")
+59 KILL LRHDI
+60 IF $DATA(LRHDIERR)
SET NOTIFY="0^2^HDI error"
+61 ;
+62 ; Update ^XTMP
+63 SET LRERT("HDIERR")=$SELECT($DATA(LRHDIERR):1,1:0)
+64 SET X=$$LOGIT^LRERT(LRTXT,.LRERT)
+65 ;
+66 ; Notify local staff of event (G.LAB MAPPING)
+67 NEW DA,DIE,DIC,DIR,D0,DIFROM,LRMTXT,X,X1,X2,XMDUZ,XMSUB,XMTEXT,XMY,XMZ,XMMG
+68 ;
+69 SET XMSUB="Local modification to file (#"_LRFILE_":"_LRFIEN_")"
+70 SET X=$SELECT(TSTAT:"modified in",1:"added to")
+71 SET LRMTXT(1,0)="Term "_X_" file #"_LRFILE_" (entry #"_LRFIEN_")"
+72 SET LRMTXT(2,0)=" "
+73 IF TSTAT=1
SET LRMTXT(3,0)="Previous Text: "_$GET(LRERT("PREV","TEXT"))
+74 SET LRMTXT(4,0)=$SELECT('TSTAT:"New Text",1:"Term")_": "_LRTXT
+75 SET X=$SELECT(TSTAT:"Modified",1:"Added")
+76 SET LRMTXT(5,0)=X_" by: "_$$UP^XLFSTR($$NAME^XUSER(DUZ,"F"))
+77 SET LRMTXT(6,0)=" "
+78 SET LRMTXT(7,0)="Tracking information below:"
+79 SET LRMTXT(8,0)="Transaction date: "_$$FMTE^XLFDT(TDT)
+80 SET LRMTXT(9,0)="Transaction number: "_TNUM
+81 SET LRMTXT(10,0)="SNOMED CT code: "_$SELECT(LRSCT'="":LRSCT,1:"n/a")
+82 ;
IF $GET(LRERT("PREV","SCT"))'=""
Begin DoDot:1
+83 SET X=LRERT("PREV","SCT")
+84 IF X'=$GET(LRERT("SCT"))
SET LRMTXT(11,0)="Previous SNOMED CT code: "_X
End DoDot:1
+85 ;
+86 ;
IF $DATA(LRHDIERR)
Begin DoDot:1
+87 SET LRMTXT(20,0)=" "
+88 SET LRMTXT(21,0)="An error occurred when notifying STS:"
+89 SET NODE="LRHDIERR(0)"
+90 SET I=$ORDER(LRMTXT("A"),-1)
+91 FOR
SET NODE=$QUERY(@NODE)
if NODE=""
QUIT
SET I=I+1
SET LRMTXT(I,0)=" "_NODE
End DoDot:1
+92 ;
+93 IF $$GOTLOCAL^XMXAPIG("LAB MAPPING")
SET XMY("I:G.LAB MAPPING")=""
+94 IF '$TEST
SET XMY("I:G.LMI")=""
+95 ;
+96 SET XMTEXT="LRMTXT("
+97 DO ^XMD
+98 ;
IF $DATA(XMMG)!'$GET(XMZ)
Begin DoDot:1
+99 IF $DATA(LRHDIERR)
SET NOTIFY="0^4^STS & Mailman error"
QUIT
+100 SET NOTIFY="0^3^MailMan error"
End DoDot:1
+101 ;
+102 ; Update and store this transaction info in the target file.
+103 DO SCTUPD
+104 ;
+105 QUIT NOTIFY
+106 ;
+107 ;
SCTUPD ; Update SCT STATUS DATE multiple
+1 ;
+2 ;ZEXCEPT: LRDUZ,LRFILE,LRFIEN,TDT,TNUM
+3 ;.
+4 NEW LRERR,LRFDA,LRFLD,LRSUBFILE,LRSTATUS
+5 ;
+6 SET LRSUBFILE=$SELECT(LRFILE=61:61.023,LRFILE=61.2:61.223,LRFILE=62:62.023,1:"")
+7 IF LRSUBFILE=""
QUIT
+8 ;
+9 ; Store date/time, user and new status
+10 SET LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",.01)=TDT
+11 SET LRSTATUS=$$GET1^DIQ(LRFILE,LRFIEN_",",21,"I")
+12 SET LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",1)=$SELECT(LRSTATUS'="":LRSTATUS,1:"R")
+13 SET LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",3)=$SELECT($GET(LRDUZ):LRDUZ,1:DUZ)
+14 ;
+15 ; Store transaction number
+16 SET LRFDA(2,LRSUBFILE,"+2,"_LRFIEN_",",2)=TNUM
+17 ;
+18 DO UPDATE^DIE("","LRFDA(2)","LRFIEN","LRERR(2)")
+19 ;
+20 ; Store execption text in WP field
+21 DO WP^DIE(LRSUBFILE,LRFIEN(2)_","_LRFIEN_",",4,"A","LRMTXT","LRERR(3)")
+22 ;
+23 QUIT