- GMRCP ;SLC/DLT,DCM - Message audit and status process ;Nov 09, 2020@08:52:15
- ;;3.0;CONSULT/REQUEST TRACKING;**1,4,17,22,27,53,55,46,91,84**;DEC 27, 1997;Build 27
- ;Processing action on Generic Requests/Consults from OE/RR
- MSG(GMRCDFN,GMRCALRM,GMRCIFN,ORN,GMRCADUZ,FLG,GMRCFORC) ;send alert notification information to OERR for notification or update
- ;GMRCDFN=patient's DFN GMRCORFN=OR file # ^OR(100,GMRCORFN
- ;GMRCALRM=alert message to be displayed with alert
- ;GMRCIFN=internal file number of consult in file 123
- ;GMRCADUZ=set in call to EN^GMRCT=array of providers who will be alerted
- ;FLG=1 if need to get list of service's providers, 0 if service dc'd.
- ;GMRCFORC=optional array passed in; users who will be alerted even if alert is turned OFF
- ;ORN=IFN from file ^ORD(100.9, for consult notification action
- N GMRCSS,GMRCORFN
- S GMRCORFN=$P(^GMR(123,+GMRCIFN,0),"^",3)
- S GMRCSS=$P($G(^GMR(123,+GMRCIFN,0)),"^",5)
- I FLG,GMRCSS D EN^GMRCT(GMRCSS)
- I $P($G(^GMR(123,+GMRCIFN,12)),U,5)="P" D
- . Q:ORN=27 ; don't notify requestor if a new order they placed, duh...
- . I DUZ=+$P(^GMR(123,+GMRCIFN,0),U,14) Q ; don;t alert on own actions
- . S GMRCADUZ(+$P(^GMR(123,+GMRCIFN,0),U,14))=""
- I FLG,$P(^GMR(123,+GMRCIFN,0),"^",11) S GMRCADUZ($P(^(0),"^",11))=""
- S:'$D(GMRCADUZ) GMRCADUZ=""
- S:'$D(GMRCFORC) GMRCFORC=""
- I $G(^GMR(123.5,GMRCSS,"INT"))=1 D ;set ORN to prosthetics alert, if necessary
- . S:$G(ORN)=63 ORN=89
- ;N X S X="" F S X=$O(GMRCADUZ(X)) Q:(X="") I +X=DUZ,X'=DUZ K GMRCADUZ(X) ;Don't send alert to user generating alert
- K GMRCADUZ(DUZ) ;Don't send alert to user generating alert
- D EN^ORB3(ORN,GMRCDFN,GMRCORFN,.GMRCADUZ,GMRCALRM,GMRCIFN,.GMRCFORC)
- Q
- AUDIT ;Build processing activity audit trail multiple.
- S GMRCDT=$$NOW^XLFDT
- AUDIT0 ;alternate entry with date already defined
- L +^GMR(123,+GMRCO,40):5 I '$T S GMRCUT=1,GMRCERR=1,GMRCERMS="Activity Trail Not filed - Consult In Use By Another User." L -^GMR(123,+GMRCO,40) Q
- S:'$D(^GMR(123,+GMRCO,40,0)) ^(0)="^123.02DA^^"
- S DA=$S($P(^GMR(123,+GMRCO,40,0),"^",3):$P(^(0),"^",3)+1,1:1)
- S $P(^GMR(123,+GMRCO,40,0),"^",3,4)=DA_"^"_DA
- AUDIT1 ;entry when the DA is not incremented (INCOMPLETE RPT writeovers)
- S GMRCORNP=$G(GMRCORNP) S:'$D(GMRCOM) GMRCOM=0
- S GMRCDEV=$G(GMRCDEV),GMRCFF=$G(GMRCFF),GMRCPA=$G(GMRCPA)
- S GMRCAD=$S('$D(GMRCAD):GMRCDT,1:GMRCAD)
- S GMRCRSLT=$G(GMRCRSLT) ;Added result with GMRC*3.0*4
- S DIE="^GMR(123,"_+GMRCO_",40,",DA(1)=+GMRCO
- I '$D(^GMR(123,DA(1),40,DA,0)) D
- . S DR=".01////^S X=GMRCDT;1////^S X=GMRCA;2////^S X=GMRCAD;3////^S X=GMRCORNP"
- . I GMRCA'=22 S DR=DR_";4////^S X=DUZ" ;if it's a print, pkg did it
- . S DR=DR_";6////^S X=GMRCFF;7////^S X=GMRCPA;9////^S X=GMRCRSLT;8///^S X=GMRCDEV"
- E D
- . ;DR string on .01 allows write over, rather than forced new entry
- . S DR=".01///^S X=GMRCDT;1////^S X=GMRCA;2////^S X=GMRCAD;3////^S X=GMRCORNP;4////^S X=DUZ;6////^S X=GMRCFF;7////^S X=GMRCPA;9////^S X=GMRCRSLT;8///^S X=GMRCDEV"
- ;Added result to the DR string
- D ^DIE
- I +$G(GMRCOM) S GMRCOM(0)=DA D
- . W !,"Enter COMMENT..."
- . N DIC,DWPK,DWLW,DIWESUB
- . S DIC=DIE_DA_",1,",DWPK=1,DWLW=74
- . S DIWESUB="COMMENTS" D EN^DIWE
- . I $P($G(^GMR(123.1,+$P(^GMR(123,+GMRCO,40,DA,0),U,2),0)),U)="ADDED COMMENT",'$O(^GMR(123,+GMRCO,40,DA,0)) D Q
- .. S DA(1)=+GMRCO,DIK="^GMR(123,"_DA(1)_",40," D ^DIK K DIK
- .. Q
- . I $P($G(^GMR(123.1,+$P(^GMR(123,+GMRCO,40,DA,0),U,2),0)),U)="COMPLETE/UPDATE",$P($G(^GMR(123,+GMRCO,40,DA,0)),U,9)="" D
- .. N GMRCMT,GMRCMT1
- .. S (GMRCMT,GMRCMT1)=0
- .. F S GMRCMT=$O(^GMR(123,+GMRCO,40,DA,1,GMRCMT)) Q:GMRCMT="" D Q:GMRCMT1=1
- ... I $TR($G(^GMR(123,+GMRCO,40,DA,1,GMRCMT,0))," ","")'="" S GMRCMT1=1
- .. I 'GMRCMT1 D G:'GMRCQUIT COMMENT Q
- ... S GMRCQUIT=0
- ... W !!,"A comment is required to complete this request!",!
- ... D WP^DIE(123.02,DA_","_+GMRCO_",",5,,"@")
- ... K DIR
- ... S DIR("A")="Type 'Q' to quit or 'C' to continue entering a comment:"
- ... S DIR("B")="C"
- ... S DIR(0)="S^C:CONTINUE;Q:QUIT"
- ... S DIR("?")="Type 'Q' if you would like to abort completion of this Consult/Procedure."
- ... S DIR("?",1)="Type 'C' or press <RETURN> to re-enter your comments."
- ... D ^DIR K DIR I Y'="C" S GMRCQUIT=1,DA(1)=+GMRCO,DIK="^GMR(123,"_DA(1)_",40," D ^DIK K DIK
- . I '$G(DA) S DA=D0
- . I $D(^GMR(123,+GMRCO,40,DA,0)),$O(^GMR(123,+GMRCO,40,DA,0)) S $P(GMRCOM,"^",2)=1
- . Q
- L -^GMR(123,+GMRCO,40)
- ; if an IFC, call event handler to generate a msg to remote site
- I $D(^GMR(123,GMRCO,12)),$L($P(^(12),U,5)) D
- . Q:'$D(^GMR(123,GMRCO,40,DA))
- . D TRIGR^GMRCIEVT(GMRCO,DA)
- ;
- K DIE,DA,DR,GMRCDEV,GMRCFF,GMRCPA,X,% Q
- ;
- STATUS ;Update the status for the Request/Consultation File
- K GMRCQUT
- Q:'$D(GMRCSTS)!('$D(GMRCA))
- S DIE=123,DA=+GMRCO
- I $D(GMRCDR),$L(GMRCDR) S DR=GMRCDR
- E S DR="8////^S X=GMRCSTS;9////^S X=GMRCA"
- L +^GMR(123,GMRCO):2 I '$T S GMRCQUT=1,GMRCERR=1,GMRCERMS="Unable to update status and last action - Consult In Use By Another User." Q
- D ^DIE
- L -^GMR(123,+GMRCO)
- K DIE,DA,DR,GMRCDR
- Q
- --- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HGMRCP 5088 printed Feb 18, 2025@23:12:47 Page 2
- GMRCP ;SLC/DLT,DCM - Message audit and status process ;Nov 09, 2020@08:52:15
- +1 ;;3.0;CONSULT/REQUEST TRACKING;**1,4,17,22,27,53,55,46,91,84**;DEC 27, 1997;Build 27
- +2 ;Processing action on Generic Requests/Consults from OE/RR
- MSG(GMRCDFN,GMRCALRM,GMRCIFN,ORN,GMRCADUZ,FLG,GMRCFORC) ;send alert notification information to OERR for notification or update
- +1 ;GMRCDFN=patient's DFN GMRCORFN=OR file # ^OR(100,GMRCORFN
- +2 ;GMRCALRM=alert message to be displayed with alert
- +3 ;GMRCIFN=internal file number of consult in file 123
- +4 ;GMRCADUZ=set in call to EN^GMRCT=array of providers who will be alerted
- +5 ;FLG=1 if need to get list of service's providers, 0 if service dc'd.
- +6 ;GMRCFORC=optional array passed in; users who will be alerted even if alert is turned OFF
- +7 ;ORN=IFN from file ^ORD(100.9, for consult notification action
- +8 NEW GMRCSS,GMRCORFN
- +9 SET GMRCORFN=$PIECE(^GMR(123,+GMRCIFN,0),"^",3)
- +10 SET GMRCSS=$PIECE($GET(^GMR(123,+GMRCIFN,0)),"^",5)
- +11 IF FLG
- IF GMRCSS
- DO EN^GMRCT(GMRCSS)
- +12 IF $PIECE($GET(^GMR(123,+GMRCIFN,12)),U,5)="P"
- Begin DoDot:1
- +13 ; don't notify requestor if a new order they placed, duh...
- if ORN=27
- QUIT
- +14 ; don;t alert on own actions
- IF DUZ=+$PIECE(^GMR(123,+GMRCIFN,0),U,14)
- QUIT
- +15 SET GMRCADUZ(+$PIECE(^GMR(123,+GMRCIFN,0),U,14))=""
- End DoDot:1
- +16 IF FLG
- IF $PIECE(^GMR(123,+GMRCIFN,0),"^",11)
- SET GMRCADUZ($PIECE(^(0),"^",11))=""
- +17 if '$DATA(GMRCADUZ)
- SET GMRCADUZ=""
- +18 if '$DATA(GMRCFORC)
- SET GMRCFORC=""
- +19 ;set ORN to prosthetics alert, if necessary
- IF $GET(^GMR(123.5,GMRCSS,"INT"))=1
- Begin DoDot:1
- +20 if $GET(ORN)=63
- SET ORN=89
- End DoDot:1
- +21 ;N X S X="" F S X=$O(GMRCADUZ(X)) Q:(X="") I +X=DUZ,X'=DUZ K GMRCADUZ(X) ;Don't send alert to user generating alert
- +22 ;Don't send alert to user generating alert
- KILL GMRCADUZ(DUZ)
- +23 DO EN^ORB3(ORN,GMRCDFN,GMRCORFN,.GMRCADUZ,GMRCALRM,GMRCIFN,.GMRCFORC)
- +24 QUIT
- AUDIT ;Build processing activity audit trail multiple.
- +1 SET GMRCDT=$$NOW^XLFDT
- AUDIT0 ;alternate entry with date already defined
- +1 LOCK +^GMR(123,+GMRCO,40):5
- IF '$TEST
- SET GMRCUT=1
- SET GMRCERR=1
- SET GMRCERMS="Activity Trail Not filed - Consult In Use By Another User."
- LOCK -^GMR(123,+GMRCO,40)
- QUIT
- +2 if '$DATA(^GMR(123,+GMRCO,40,0))
- SET ^(0)="^123.02DA^^"
- +3 SET DA=$SELECT($PIECE(^GMR(123,+GMRCO,40,0),"^",3):$PIECE(^(0),"^",3)+1,1:1)
- +4 SET $PIECE(^GMR(123,+GMRCO,40,0),"^",3,4)=DA_"^"_DA
- AUDIT1 ;entry when the DA is not incremented (INCOMPLETE RPT writeovers)
- +1 SET GMRCORNP=$GET(GMRCORNP)
- if '$DATA(GMRCOM)
- SET GMRCOM=0
- +2 SET GMRCDEV=$GET(GMRCDEV)
- SET GMRCFF=$GET(GMRCFF)
- SET GMRCPA=$GET(GMRCPA)
- +3 SET GMRCAD=$SELECT('$DATA(GMRCAD):GMRCDT,1:GMRCAD)
- +4 ;Added result with GMRC*3.0*4
- SET GMRCRSLT=$GET(GMRCRSLT)
- +5 SET DIE="^GMR(123,"_+GMRCO_",40,"
- SET DA(1)=+GMRCO
- +6 IF '$DATA(^GMR(123,DA(1),40,DA,0))
- Begin DoDot:1
- +7 SET DR=".01////^S X=GMRCDT;1////^S X=GMRCA;2////^S X=GMRCAD;3////^S X=GMRCORNP"
- +8 ;if it's a print, pkg did it
- IF GMRCA'=22
- SET DR=DR_";4////^S X=DUZ"
- +9 SET DR=DR_";6////^S X=GMRCFF;7////^S X=GMRCPA;9////^S X=GMRCRSLT;8///^S X=GMRCDEV"
- End DoDot:1
- +10 IF '$TEST
- Begin DoDot:1
- +11 ;DR string on .01 allows write over, rather than forced new entry
- +12 SET DR=".01///^S X=GMRCDT;1////^S X=GMRCA;2////^S X=GMRCAD;3////^S X=GMRCORNP;4////^S X=DUZ;6////^S X=GMRCFF;7////^S X=GMRCPA;9////^S X=GMRCRSLT;8///^S X=GMRCDEV"
- End DoDot:1
- +13 ;Added result to the DR string
- +14 DO ^DIE
- +1 IF +$GET(GMRCOM)
- SET GMRCOM(0)=DA
- Begin DoDot:1
- +2 WRITE !,"Enter COMMENT..."
- +3 NEW DIC,DWPK,DWLW,DIWESUB
- +4 SET DIC=DIE_DA_",1,"
- SET DWPK=1
- SET DWLW=74
- +5 SET DIWESUB="COMMENTS"
- DO EN^DIWE
- +6 IF $PIECE($GET(^GMR(123.1,+$PIECE(^GMR(123,+GMRCO,40,DA,0),U,2),0)),U)="ADDED COMMENT"
- IF '$ORDER(^GMR(123,+GMRCO,40,DA,0))
- Begin DoDot:2
- +7 SET DA(1)=+GMRCO
- SET DIK="^GMR(123,"_DA(1)_",40,"
- DO ^DIK
- KILL DIK
- +8 QUIT
- End DoDot:2
- QUIT
- +9 IF $PIECE($GET(^GMR(123.1,+$PIECE(^GMR(123,+GMRCO,40,DA,0),U,2),0)),U)="COMPLETE/UPDATE"
- IF $PIECE($GET(^GMR(123,+GMRCO,40,DA,0)),U,9)=""
- Begin DoDot:2
- +10 NEW GMRCMT,GMRCMT1
- +11 SET (GMRCMT,GMRCMT1)=0
- +12 FOR
- SET GMRCMT=$ORDER(^GMR(123,+GMRCO,40,DA,1,GMRCMT))
- if GMRCMT=""
- QUIT
- Begin DoDot:3
- +13 IF $TRANSLATE($GET(^GMR(123,+GMRCO,40,DA,1,GMRCMT,0))," ","")'=""
- SET GMRCMT1=1
- End DoDot:3
- if GMRCMT1=1
- QUIT
- +14 IF 'GMRCMT1
- Begin DoDot:3
- +15 SET GMRCQUIT=0
- +16 WRITE !!,"A comment is required to complete this request!",!
- +17 DO WP^DIE(123.02,DA_","_+GMRCO_",",5,,"@")
- +18 KILL DIR
- +19 SET DIR("A")="Type 'Q' to quit or 'C' to continue entering a comment:"
- +20 SET DIR("B")="C"
- +21 SET DIR(0)="S^C:CONTINUE;Q:QUIT"
- +22 SET DIR("?")="Type 'Q' if you would like to abort completion of this Consult/Procedure."
- +23 SET DIR("?",1)="Type 'C' or press <RETURN> to re-enter your comments."
- +24 DO ^DIR
- KILL DIR
- IF Y'="C"
- SET GMRCQUIT=1
- SET DA(1)=+GMRCO
- SET DIK="^GMR(123,"_DA(1)_",40,"
- DO ^DIK
- KILL DIK
- End DoDot:3
- if 'GMRCQUIT
- GOTO COMMENT
- QUIT
- End DoDot:2
- +25 IF '$GET(DA)
- SET DA=D0
- +26 IF $DATA(^GMR(123,+GMRCO,40,DA,0))
- IF $ORDER(^GMR(123,+GMRCO,40,DA,0))
- SET $PIECE(GMRCOM,"^",2)=1
- +27 QUIT
- End DoDot:1
- +28 LOCK -^GMR(123,+GMRCO,40)
- +29 ; if an IFC, call event handler to generate a msg to remote site
- +30 IF $DATA(^GMR(123,GMRCO,12))
- IF $LENGTH($PIECE(^(12),U,5))
- Begin DoDot:1
- +31 if '$DATA(^GMR(123,GMRCO,40,DA))
- QUIT
- +32 DO TRIGR^GMRCIEVT(GMRCO,DA)
- End DoDot:1
- +33 ;
- +34 KILL DIE,DA,DR,GMRCDEV,GMRCFF,GMRCPA,X,%
- QUIT
- +35 ;
- STATUS ;Update the status for the Request/Consultation File
- +1 KILL GMRCQUT
- +2 if '$DATA(GMRCSTS)!('$DATA(GMRCA))
- QUIT
- +3 SET DIE=123
- SET DA=+GMRCO
- +4 IF $DATA(GMRCDR)
- IF $LENGTH(GMRCDR)
- SET DR=GMRCDR
- +5 IF '$TEST
- SET DR="8////^S X=GMRCSTS;9////^S X=GMRCA"
- +6 LOCK +^GMR(123,GMRCO):2
- IF '$TEST
- SET GMRCQUT=1
- SET GMRCERR=1
- SET GMRCERMS="Unable to update status and last action - Consult In Use By Another User."
- QUIT
- +7 DO ^DIE
- +8 LOCK -^GMR(123,+GMRCO)
- +9 KILL DIE,DA,DR,GMRCDR
- +10 QUIT