ORWPCE1 ;ISL/KCM,JER - PCE Calls from CPRS GUI ;Feb 12, 2024@14:45
;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,132,148,187,190,215,243,280,306,361,501,559,405,598,606**;Dec 17, 1997;Build 3
;
; Reference to DSELECT^GMPLENFM, ^TMP("IB",$J) in ICR #1365
; Reference to $$DATA2PCE^PXAPI in ICR #1893
; Reference to $$DELVFILE^PXAPI in ICR #1890
; Reference to DQSAVE^PXRPC in ICR #6023
; Reference to $$NOW^XLFDT in ICR #5747
; Reference to FILE^TIUSRVP in ICR #3540
; Reference to $$ISADDNDM^TIULC1 in ICR #2323
; Reference to FINDVISIT^PXUTLVST in ICR #7435
; Reference to ^TIU(8925, in ICR #2937
; Reference to ^AUPNVSIT( in ICR #2028
;
GETVSIT(VSTR,DFN) ; lookup a visit
; Return Visit IEN if there is a Visit that matches the input; otherwise return 0.
N ORDTE,ORLOC,ORSVC,ORVISIT,ORVISITLIST
S ORVISIT=0
I '$G(DFN)!($G(VSTR)="") Q ORVISIT
;
S ORLOC=$P(VSTR,";")
S ORDTE=$P(VSTR,";",2)
S ORSVC=$P(VSTR,";",3)
D FINDVISIT^PXUTLVST(DFN,ORDTE,ORLOC,ORSVC,"","","","",1,.ORVISITLIST)
I $G(ORVISITLIST(0))>0 S ORVISIT=$G(ORVISITLIST(1))
;
Q ORVISIT
;
DQSAVE(ORRESULT,PCELIST,NOTEIEN,GMPLUSER,ORLOC) ; Background Call to DATA2PCE IA#6443
I $D(ZTQUEUED) S ZTREQ="@"
N PKG,PKGNAME,ORPXAPI,ORPCELST,ORPROBLS,ORPXDEL,PKGNAME,PROBLEM,PXAPREDT,PXNODE,PXVSTR,SRC,X,ORAVST,ORPXIMMRD,OK
N DFN,ERRARR,ERRPROB
S ORAVST=$P($G(PCELIST(1)),U,5) I +ORAVST S $P(PCELIST(1),U,5)=""
I +ORAVST>0 D
.S PXNODE=$G(^AUPNVSIT(ORAVST,0))
.S PXVSTR=$P(PXNODE,U,6)_";"_$P(PXNODE,U)_";"_$P(PXNODE,U,7)
.I $P(PXNODE,U,7)'="H" Q
.I PXVSTR'=$P($G(PCELIST(1)),U,4) S ORAVST=-1
I +ORAVST<1 S ORAVST=""
S PKGNAME="ORDER ENTRY/RESULTS REPORTING"
S PKG=$O(^DIC(9.4,"B","ORDER ENTRY/RESULTS REPORTING",0))
S SRC="TEXT INTEGRATION UTILITIES"
M ORPCELST=PCELIST
S ORRESULT(0)=1
D DQSAVE^PXRPC(.ORPCELST,.ORPXAPI,.ORPROBLS,.SRC,.ORPXIMMRD)
S DFN=ORPXAPI("ENCOUNTER",1,"PATIENT")
S PXAPREDT=0
I $D(ORPXAPI("PROVIDER")) S PXAPREDT=1
D DQSAVE1
Q
;
DQSAVE1 ;
;Remove any problems to add that the patient already has as active problems
I $D(ORPROBLS),$D(DFN) D
. N ORWPROB,ORPROBIX
. K ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS")
. D DSELECT^GMPLENFM ;DBIA 1365
. S ORPROBIX=0
. F S ORPROBIX=$O(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX)) Q:'ORPROBIX D ;DBIA 1365
.. S ORWPROB=$P(^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX),"^",2,3)
.. S ORWPROB($S($E(ORWPROB,1)="$":$E(ORWPROB,2,255),1:ORWPROB))=""
. K ^TMP("IB",$J,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS")
. Q:'$D(ORWPROB)
. S ORPROBIX=""
. F S ORPROBIX=$O(ORPROBLS(ORPROBIX)) Q:'ORPROBIX D
.. S:$D(ORWPROB(ORPROBLS(ORPROBIX))) ORPXAPI("DX/PL",ORPROBIX,"PL ADD")=0
;
I $$MDS(.ORPXAPI,$G(ORLOC)) D
.N ORTIME
.S ORTIME=$$NOW^XLFDT
.S ORPXAPI("ENCOUNTER",1,"CHECKOUT D/T")=ORTIME
DATA2PCE ;
N TIEN,VISITOK,X0,X12
S OK=$$DATA2PCE^PXAPI("ORPXAPI",PKG,SRC,.ORAVST,DUZ,0,.ERRARR,PXAPREDT,.ERRPROB)
S VISITOK=$S(OK=1:1,(OK=-1)&(+ORAVST>0):1,(OK=-5)&(+ORAVST>0):1,1:0)
I OK<0,OK'=-5 D ERROR(.ORRESULT,.ERRARR,.ERRPROB) ;S ORRESULT(0)=OK
S ORRESULT(0)=$S(VISITOK=1:1,1:OK)
S $P(ORRESULT(0),U,2)=ORAVST
;NOTEIEN only set on inpatient encounters.
I VISITOK,+NOTEIEN,$P($G(^TIU(8925,+NOTEIEN,0)),U,13)="H" D
.N OROK,ORX
.S ORX(1207)=ORAVST
.D FILE^TIUSRVP(.OROK,NOTEIEN,.ORX,1)
.I '$$ISADDNDM^TIULC1(NOTEIEN) Q
.S X0=$G(^TIU(8925,NOTEIEN,0))
.I +$P(X0,U,6)>0 D
..S TIEN=+$P(X0,U,6)
..S X12=$G(^TIU(8925,TIEN,12))
..I $P(X12,U,7)>0 Q
..S ORX(1207)=ORAVST
..D FILE^TIUSRVP(.OROK,TIEN,.ORX,1)
.I OROK'=1 S ORCNT=1+$O(ORRESULT("?"),-1),ORRESULT(ORCNT)=$P(OROK,U,2)
S ZTSTAT=0 ; clear sync flag
;.N OROK,ORCNT
;.D LNKSVST^TIUPXAP3(.OROK,DFN,NOTEIEN,ORAVST)
;I OROK'=1 S ORCNT=1+$O(RESULT("?"),-1),RESULT(ORCNT)=$P(OROK,U,2)
; Save imm smallpox reading.
; Need separate DATA2PCE call, as it is tied to a different Visit.
I $D(ORPXIMMRD) D
. N CNT,ORERROR,ORVISIT,OK,ERRARR,ERRPROB
. S ORERROR=$G(ORPXIMMRD("IMMUNIZATION",1,"ERROR"))
. S ORVISIT=$G(ORPXIMMRD("IMMUNIZATION",1,"VISIT"))
. K ORPXIMMRD("IMMUNIZATION",1,"ERROR"),ORPXIMMRD("IMMUNIZATION",1,"VISIT")
. I ORERROR'="" D Q
. . S CNT=+$O(ORRESULT(""),-1)
. . S CNT=CNT+1
. . S ORRESULT(CNT)=" "
. . S CNT=CNT+1
. . S ORRESULT(CNT)=ORERROR
. I 'ORVISIT Q
. S OK=$$DATA2PCE^PXAPI("ORPXIMMRD",PKG,SRC,.ORVISIT,DUZ,0,.ERRARR,"",.ERRPROB)
. I OK<0,OK'=-5 D
. . S CNT=+$O(ORRESULT(""),-1)
. . S CNT=CNT+1
. . S ORRESULT(CNT)=" "
. . D ERROR(.ORRESULT,.ERRARR,.ERRPROB)
. . I +$G(ORRESULT(0))>0 S $P(ORRESULT(0),U,1)=OK
;
Q
;
ERROR(ORRESULT,ERRARR,ERRPROB) ;
N CNT,IDX,MSG
S CNT=+$O(ORRESULT(""),-1)
I $D(ERRARR) D
.D ACOPY^ORERRH("ERRARR","MSG()")
.S IDX=0 F S IDX=$O(MSG(IDX)) Q:IDX'>0 S CNT=CNT+1,ORRESULT(CNT)=$P(MSG(IDX),"=",2,10)
K OUTPUT
I $D(ERRPROB),'$D(ERRARR) D
.D ACOPY^ORERRH("ERRPROB","MSG()")
.S IDX=0 F S IDX=$O(MSG(IDX)) Q:IDX'>0 S CNT=CNT+1,ORRESULT(CNT)=$P(MSG(IDX),"=",2,10)
Q
;
MDS(X,ORLOC) ; return TRUE if checkout is needed
I $$CHKOUT^ORWPCE2(ORLOC) Q 1
N I,ORAUTO,OROK
S (OROK,I)=0
F S I=$O(X("DX/PL",I)) Q:'I D Q:OROK
. I $G(X("DX/PL",I,"DIAGNOSIS")) S OROK=1
I 'OROK D
.S I=0 F S I=$O(X("PROCEDURE",I)) Q:'I D Q:OROK
.. I $G(X("PROCEDURE",I,"PROCEDURE")) S OROK=1
I $D(X("PROVIDER",1,"NAME")) S OROK=1
Q OROK
NONCOUNT(ORY,ORLOC) ; Is the location a non-count clinic? (DBIA #964)
Q:'ORLOC
S ORY=$S($P($G(^SC(ORLOC,0)),U,17)="Y":1,1:0)
Q
;
--- Routine Detail --- with STRUCTURED ROUTINE LISTING ---[H[J[2J[HORWPCE1 5602 printed Sep 02, 2024@19:22:17 Page 2
ORWPCE1 ;ISL/KCM,JER - PCE Calls from CPRS GUI ;Feb 12, 2024@14:45
+1 ;;3.0;ORDER ENTRY/RESULTS REPORTING;**10,85,116,132,148,187,190,215,243,280,306,361,501,559,405,598,606**;Dec 17, 1997;Build 3
+2 ;
+3 ; Reference to DSELECT^GMPLENFM, ^TMP("IB",$J) in ICR #1365
+4 ; Reference to $$DATA2PCE^PXAPI in ICR #1893
+5 ; Reference to $$DELVFILE^PXAPI in ICR #1890
+6 ; Reference to DQSAVE^PXRPC in ICR #6023
+7 ; Reference to $$NOW^XLFDT in ICR #5747
+8 ; Reference to FILE^TIUSRVP in ICR #3540
+9 ; Reference to $$ISADDNDM^TIULC1 in ICR #2323
+10 ; Reference to FINDVISIT^PXUTLVST in ICR #7435
+11 ; Reference to ^TIU(8925, in ICR #2937
+12 ; Reference to ^AUPNVSIT( in ICR #2028
+13 ;
GETVSIT(VSTR,DFN) ; lookup a visit
+1 ; Return Visit IEN if there is a Visit that matches the input; otherwise return 0.
+2 NEW ORDTE,ORLOC,ORSVC,ORVISIT,ORVISITLIST
+3 SET ORVISIT=0
+4 IF '$GET(DFN)!($GET(VSTR)="")
QUIT ORVISIT
+5 ;
+6 SET ORLOC=$PIECE(VSTR,";")
+7 SET ORDTE=$PIECE(VSTR,";",2)
+8 SET ORSVC=$PIECE(VSTR,";",3)
+9 DO FINDVISIT^PXUTLVST(DFN,ORDTE,ORLOC,ORSVC,"","","","",1,.ORVISITLIST)
+10 IF $GET(ORVISITLIST(0))>0
SET ORVISIT=$GET(ORVISITLIST(1))
+11 ;
+12 QUIT ORVISIT
+13 ;
DQSAVE(ORRESULT,PCELIST,NOTEIEN,GMPLUSER,ORLOC) ; Background Call to DATA2PCE IA#6443
+1 IF $DATA(ZTQUEUED)
SET ZTREQ="@"
+2 NEW PKG,PKGNAME,ORPXAPI,ORPCELST,ORPROBLS,ORPXDEL,PKGNAME,PROBLEM,PXAPREDT,PXNODE,PXVSTR,SRC,X,ORAVST,ORPXIMMRD,OK
+3 NEW DFN,ERRARR,ERRPROB
+4 SET ORAVST=$PIECE($GET(PCELIST(1)),U,5)
IF +ORAVST
SET $PIECE(PCELIST(1),U,5)=""
+5 IF +ORAVST>0
Begin DoDot:1
+6 SET PXNODE=$GET(^AUPNVSIT(ORAVST,0))
+7 SET PXVSTR=$PIECE(PXNODE,U,6)_";"_$PIECE(PXNODE,U)_";"_$PIECE(PXNODE,U,7)
+8 IF $PIECE(PXNODE,U,7)'="H"
QUIT
+9 IF PXVSTR'=$PIECE($GET(PCELIST(1)),U,4)
SET ORAVST=-1
End DoDot:1
+10 IF +ORAVST<1
SET ORAVST=""
+11 SET PKGNAME="ORDER ENTRY/RESULTS REPORTING"
+12 SET PKG=$ORDER(^DIC(9.4,"B","ORDER ENTRY/RESULTS REPORTING",0))
+13 SET SRC="TEXT INTEGRATION UTILITIES"
+14 MERGE ORPCELST=PCELIST
+15 SET ORRESULT(0)=1
+16 DO DQSAVE^PXRPC(.ORPCELST,.ORPXAPI,.ORPROBLS,.SRC,.ORPXIMMRD)
+17 SET DFN=ORPXAPI("ENCOUNTER",1,"PATIENT")
+18 SET PXAPREDT=0
+19 IF $DATA(ORPXAPI("PROVIDER"))
SET PXAPREDT=1
+20 DO DQSAVE1
+21 QUIT
+22 ;
DQSAVE1 ;
+1 ;Remove any problems to add that the patient already has as active problems
+2 IF $DATA(ORPROBLS)
IF $DATA(DFN)
Begin DoDot:1
+3 NEW ORWPROB,ORPROBIX
+4 KILL ^TMP("IB",$JOB,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS")
+5 ;DBIA 1365
DO DSELECT^GMPLENFM
+6 SET ORPROBIX=0
+7 ;DBIA 1365
FOR
SET ORPROBIX=$ORDER(^TMP("IB",$JOB,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX))
if 'ORPROBIX
QUIT
Begin DoDot:2
+8 SET ORWPROB=$PIECE(^TMP("IB",$JOB,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS",ORPROBIX),"^",2,3)
+9 SET ORWPROB($SELECT($EXTRACT(ORWPROB,1)="$":$EXTRACT(ORWPROB,2,255),1:ORWPROB))=""
End DoDot:2
+10 KILL ^TMP("IB",$JOB,"INTERFACES","GMP SELECT PATIENT ACTIVE PROBLEMS")
+11 if '$DATA(ORWPROB)
QUIT
+12 SET ORPROBIX=""
+13 FOR
SET ORPROBIX=$ORDER(ORPROBLS(ORPROBIX))
if 'ORPROBIX
QUIT
Begin DoDot:2
+14 if $DATA(ORWPROB(ORPROBLS(ORPROBIX)))
SET ORPXAPI("DX/PL",ORPROBIX,"PL ADD")=0
End DoDot:2
End DoDot:1
+15 ;
+16 IF $$MDS(.ORPXAPI,$GET(ORLOC))
Begin DoDot:1
+17 NEW ORTIME
+18 SET ORTIME=$$NOW^XLFDT
+19 SET ORPXAPI("ENCOUNTER",1,"CHECKOUT D/T")=ORTIME
End DoDot:1
DATA2PCE ;
+1 NEW TIEN,VISITOK,X0,X12
+2 SET OK=$$DATA2PCE^PXAPI("ORPXAPI",PKG,SRC,.ORAVST,DUZ,0,.ERRARR,PXAPREDT,.ERRPROB)
+3 SET VISITOK=$SELECT(OK=1:1,(OK=-1)&(+ORAVST>0):1,(OK=-5)&(+ORAVST>0):1,1:0)
+4 ;S ORRESULT(0)=OK
IF OK<0
IF OK'=-5
DO ERROR(.ORRESULT,.ERRARR,.ERRPROB)
+5 SET ORRESULT(0)=$SELECT(VISITOK=1:1,1:OK)
+6 SET $PIECE(ORRESULT(0),U,2)=ORAVST
+7 ;NOTEIEN only set on inpatient encounters.
+8 IF VISITOK
IF +NOTEIEN
IF $PIECE($GET(^TIU(8925,+NOTEIEN,0)),U,13)="H"
Begin DoDot:1
+9 NEW OROK,ORX
+10 SET ORX(1207)=ORAVST
+11 DO FILE^TIUSRVP(.OROK,NOTEIEN,.ORX,1)
+12 IF '$$ISADDNDM^TIULC1(NOTEIEN)
QUIT
+13 SET X0=$GET(^TIU(8925,NOTEIEN,0))
+14 IF +$PIECE(X0,U,6)>0
Begin DoDot:2
+15 SET TIEN=+$PIECE(X0,U,6)
+16 SET X12=$GET(^TIU(8925,TIEN,12))
+17 IF $PIECE(X12,U,7)>0
QUIT
+18 SET ORX(1207)=ORAVST
+19 DO FILE^TIUSRVP(.OROK,TIEN,.ORX,1)
End DoDot:2
+20 IF OROK'=1
SET ORCNT=1+$ORDER(ORRESULT("?"),-1)
SET ORRESULT(ORCNT)=$PIECE(OROK,U,2)
End DoDot:1
+21 ; clear sync flag
SET ZTSTAT=0
+22 ;.N OROK,ORCNT
+23 ;.D LNKSVST^TIUPXAP3(.OROK,DFN,NOTEIEN,ORAVST)
+24 ;I OROK'=1 S ORCNT=1+$O(RESULT("?"),-1),RESULT(ORCNT)=$P(OROK,U,2)
+25 ; Save imm smallpox reading.
+26 ; Need separate DATA2PCE call, as it is tied to a different Visit.
+27 IF $DATA(ORPXIMMRD)
Begin DoDot:1
+28 NEW CNT,ORERROR,ORVISIT,OK,ERRARR,ERRPROB
+29 SET ORERROR=$GET(ORPXIMMRD("IMMUNIZATION",1,"ERROR"))
+30 SET ORVISIT=$GET(ORPXIMMRD("IMMUNIZATION",1,"VISIT"))
+31 KILL ORPXIMMRD("IMMUNIZATION",1,"ERROR"),ORPXIMMRD("IMMUNIZATION",1,"VISIT")
+32 IF ORERROR'=""
Begin DoDot:2
+33 SET CNT=+$ORDER(ORRESULT(""),-1)
+34 SET CNT=CNT+1
+35 SET ORRESULT(CNT)=" "
+36 SET CNT=CNT+1
+37 SET ORRESULT(CNT)=ORERROR
End DoDot:2
QUIT
+38 IF 'ORVISIT
QUIT
+39 SET OK=$$DATA2PCE^PXAPI("ORPXIMMRD",PKG,SRC,.ORVISIT,DUZ,0,.ERRARR,"",.ERRPROB)
+40 IF OK<0
IF OK'=-5
Begin DoDot:2
+41 SET CNT=+$ORDER(ORRESULT(""),-1)
+42 SET CNT=CNT+1
+43 SET ORRESULT(CNT)=" "
+44 DO ERROR(.ORRESULT,.ERRARR,.ERRPROB)
+45 IF +$GET(ORRESULT(0))>0
SET $PIECE(ORRESULT(0),U,1)=OK
End DoDot:2
End DoDot:1
+46 ;
+47 QUIT
+48 ;
ERROR(ORRESULT,ERRARR,ERRPROB) ;
+1 NEW CNT,IDX,MSG
+2 SET CNT=+$ORDER(ORRESULT(""),-1)
+3 IF $DATA(ERRARR)
Begin DoDot:1
+4 DO ACOPY^ORERRH("ERRARR","MSG()")
+5 SET IDX=0
FOR
SET IDX=$ORDER(MSG(IDX))
if IDX'>0
QUIT
SET CNT=CNT+1
SET ORRESULT(CNT)=$PIECE(MSG(IDX),"=",2,10)
End DoDot:1
+6 KILL OUTPUT
+7 IF $DATA(ERRPROB)
IF '$DATA(ERRARR)
Begin DoDot:1
+8 DO ACOPY^ORERRH("ERRPROB","MSG()")
+9 SET IDX=0
FOR
SET IDX=$ORDER(MSG(IDX))
if IDX'>0
QUIT
SET CNT=CNT+1
SET ORRESULT(CNT)=$PIECE(MSG(IDX),"=",2,10)
End DoDot:1
+10 QUIT
+11 ;
MDS(X,ORLOC) ; return TRUE if checkout is needed
+1 IF $$CHKOUT^ORWPCE2(ORLOC)
QUIT 1
+2 NEW I,ORAUTO,OROK
+3 SET (OROK,I)=0
+4 FOR
SET I=$ORDER(X("DX/PL",I))
if 'I
QUIT
Begin DoDot:1
+5 IF $GET(X("DX/PL",I,"DIAGNOSIS"))
SET OROK=1
End DoDot:1
if OROK
QUIT
+6 IF 'OROK
Begin DoDot:1
+7 SET I=0
FOR
SET I=$ORDER(X("PROCEDURE",I))
if 'I
QUIT
Begin DoDot:2
+8 IF $GET(X("PROCEDURE",I,"PROCEDURE"))
SET OROK=1
End DoDot:2
if OROK
QUIT
End DoDot:1
+9 IF $DATA(X("PROVIDER",1,"NAME"))
SET OROK=1
+10 QUIT OROK
NONCOUNT(ORY,ORLOC) ; Is the location a non-count clinic? (DBIA #964)
+1 if 'ORLOC
QUIT
+2 SET ORY=$SELECT($PIECE($GET(^SC(ORLOC,0)),U,17)="Y":1,1:0)
+3 QUIT
+4 ;